我正在使用 Django Oscar 开发一个电子商务项目,我遇到了一个似乎无法解决的问题。我的目标是自定义类别 URL 以仅使用 slug,而不是同时使用 slug 和 pk,但我在实现这一点时遇到了困难。这是我到目前为止所做的:
我想要实现的目标: 我想从 Django Oscar 中的类别 URL 中删除 pk。现在,我的网址如下所示:
http://127.0.0.1:8000/category/metal-detectors_2/
我希望它们看起来像这样:
http://127.0.0.1:8000/metal-detectors/
我的设置:
NoReverseMatch: Reverse for 'category' with keyword arguments '{'category_slug': 'metal-detectors', 'pk': 2}' not found.
这是我的自定义category_tags.py中的category_tree标签的一部分:
@register.simple_tag(name="category_tree")
def get_annotated_list(depth=None, parent=None):
# Logic to retrieve categories
# ...
info = CheapCategoryInfo(
node,
url=node._get_absolute_url(tree_slug), # Uses both slug and pk
num_to_close=[],
level=node_depth - start_depth,
)
annotated_categories.append(info)
我尝试过的: 我像这样修改了类别模型中的 get_absolute_url 方法来尝试删除 pk:
def get_absolute_url(self):
return reverse(
"catalogue:category",
kwargs={"category_slug": self.slug}, # Removed pk here
)
我还自定义了 urls.py 以从 URL 模式中删除 pk:
re_path(r'^(?P<category_slug>[\w-]+)/$', CustomProductCategoryView.as_view(), name='category')
我正在尝试像这样循环遍历categories.html中的类别:
{% load category_tags %}
<ul class="filter-categories__list">
{% category_tree as tree_categories %}
{% for category in tree_categories %}
<li>{{ category.name }} - URL: {{ category.get_absolute_url }}</li>
{% endfor %}
</ul>
问题: 如何正确修改 Django Oscar 以从类别 URL 中删除 pk 并仅使用category_slug? 有没有更好的方法来自定义category_tree模板标签来实现这一点? 任何指导将不胜感激!我对 Django Oscar 比较陌生,因此适合初学者的解释会非常有帮助。
提前致谢!
检查此教程链接可能会有所帮助https://youtu.be/i8Xsb3Es04Y