我的网址
/tags/{slug}
指向这种观点:
class TagsDetailList(request, ListView):
queryset = Link.objects.filter(tags__name__in=['request.slug'])
template_name = "links/tags_detail_list.html"
所以我在url中有request.slug对象。 现在我想创建一个ListView,通过request.slug过滤Link.objects并使用查询结果响应给定模板。
一切正常但我的模板上没有查询。
响应模板是:
{% extends "base.html" %}
{% block content %}
<h2>Tags Detail List</h2>
<ul>
{% if link in object_list %}
{% for link in object_list %}
<li>
<a href="{% url 'tag_detail' slug=link.slug %}">{{ link.title }}</a>
</li>
{% endfor %}
{% else %}
<p> Error: No Links in queryset! </p>
{% endif %}
<ul>
{% endblock %}
我没有得到一些元素,只有错误信息。它对我的观点要求不好。 谁可以帮助我,并告诉我如何在我的视图中检索请求slug?
编辑:
好的解决方案。我学会了kwargs的工作方式(一小部分)。 但在模板上我仍然得到没有查询集的错误。尝试了两个答案,也改变了一点,但从未真正奏效。任何暗示是什么导致这个?答案 0 :(得分:2)
如果你的urls
模式是这样的:
r'^list/(?P<slug>[\w,\*]+)?$'
所以views
应该是:
class TagsDetailList(ListView):
model = Link
template_name = "links/tags_detail_list.html"
def get_queryset(self):
qs = self.model.objects.all()
if self.kwargs.get('slug'):
qs = qs.filter(tags__name=self.kwargs['slug'])
return qs
答案 1 :(得分:0)
你在这里所做的事情没有意义:你只是要求名字在列表中的标签包含文字文本&#34; request.slug&#34 ;.
您需要覆盖get_queryset
,以便查询slu {的实际值,该值位于self.kwargs
。
def get_queryset(self, *args, **kwargs):
return Link.objects.filter(tags__name=self.kwargs ['slug'])
此外,我不知道if语句在您的模板中做了什么,但您还没有定义&#34; link&#34;它永远不会评估为真,所以没有链接显示。
答案 2 :(得分:0)
也许会有所帮助,但是它在Django 2+中对我有用:
您的urls.py
:
...
path('tags/<slug>/', TagsDetailList.as_view(), name='tags_detail'),
...
您的views.py
:
...
class TagsDetailList(ListView):
model = Link
template_name = 'links/tags_detail_list.html'
def get_queryset(self, *args, **kwargs):
return Link.objects.filter(tags__slug=self.kwargs['slug'])
...