django模板

时间:2017-01-10 11:52:58

标签: django django-templates django-views django-urls

我在django中遇到反向问题,我在docs上尝试了不同的方法,但结果相同。例如:

URL:

url(r'^(?P<year>[0-9]{4})/$', views.example, name='example'),

视图:

def example(request, year):
    data = dict()
    books_year = Book.objects.filter(publication_date__year=year)
    data['books_year'] = books_year
    return render(request, 'example.html', data)

example.html的:

{% if books_year %}
    {% for book in books_year %}
        <tr>
            <td>
                {{ book.title }} |
                {% for authors in book.authors.all %}
                    {{ authors }}
                {% endfor %} |
                {{ book.publisher }} |
                {{ book.publication_date }}
            </td>
        </tr>
        <tr>
            <td>
                <a href="/2014/">2014 Archive</a>
                <a href="{% url 'example' 2014 %}">2014 Archive</a>
                 <ul> 
                    {% for yearvar in year_list %} 
                        <li><a href="{% url 'example' yearvar %}">{{ yearvar }} Archive</a></li> 
                    {% endfor %} 
                </ul>
            </td>
        </tr>
    {% endfor %}
{% endif %}

如果我使用此<a href="/2014/">2014 Archive</a>,它可以正常工作。 如果我使用此<a href="{% url 'example' 2014 %}">2014 Archive</a>进行尝试,则会出现此错误:

django.urls.exceptions.NoReverseMatch: Reverse for 'example' with arguments '(2014,)' and keyword arguments '{}' not found. 0 pattern(s) tried: []

最后当我尝试这样的时候:

             <ul> 
                {% for yearvar in year_list %} 
                    <li><a href="{% url 'example' yearvar %}">{{ yearvar }} Archive</a></li> 
                {% endfor %} 
            </ul>

页面已运行,但未显示该链接。 该页面应包含一个链接,该链接将重定向到2014而不是其他年份。

我尝试使用不同的视图,htmls和url,当我尝试使用它们时,会出现同样的错误。任何人都可以解释原因吗?

1 个答案:

答案 0 :(得分:1)

我的问题有两种可能的解决方案:

  1. 从我的主urls.py中删除books名称空间。

  2. 在devxplorer中提到的django模板url中添加命名空间。

    <a href="{% url 'books:example' 2014 %}">2014 Archive</a>