关于slug请求的ListView

时间:2014-10-26 13:17:24

标签: python django listview slug

我的网址

/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的工作方式(一小部分)。 但在模板上我仍然得到没有查询集的错误。尝试了两个答案,也改变了一点,但从未真正奏效。任何暗示是什么导致这个?

3 个答案:

答案 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'])
...