0

我有以下内容urlpatterns

urlpatterns = patterns('',
    url(r'^new$', 'webapp.views.new_post', name="new_post"),
    url(r'^$', 'webapp.views.all_posts', name="main"),
    url(r'^post/(\d{4})/(\d{2})/(\d{2})/$', 'webapp.views.single_post', name="single_post"),
    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    # url(r'^admin/', include(admin.site.urls)),
)

还有一个看起来像这样的模板:

{% for i in posts %}
    <h3><a href={% url 'single_post' i.created_at.year i.created_at.month i.created_at.day %}>{{i.title}}</a></h3>
    Posted at: {{i.created_at}}
    <br>
    <br>
    {{i.text}}
    <hr>
{% endfor %}

但我一直收到一个NoReverseMatch例外说Reverse for 'single_post' with arguments '(2012, 9, 30)' and keyword arguments '{}' not found.

编辑:我在 Python 2.7 上使用 Django 1.4.1

4

2 回答 2

3

single_post 的 url def 需要 3 个 args,但您传递的是 4

所以而不是

<h3><a href={% url 'single_post' i.created_at.year i.created_at.month i.created_at.day i.slug %}>{{i.title}}</a></h3>

你可能想要

<h3><a href={% url 'single_post' i.created_at.year i.created_at.month i.created_at.day %}>{{i.title}}</a></h3>

哦,但你可能想要最后的蛞蝓,在这种情况下,在你的 urls.py 中,将其更改为...

url(r'^post/(\d{4})/(\d{2})/(\d{2})/([\w-]+)$', 'webapp.views.single_post', name="single_post")
于 2012-10-02T08:10:09.977 回答
1

来自 python 文档:

{m} 指定恰好匹配前一个 RE 的 m 个副本;较少的匹配会导致整个 RE 不匹配。例如,a{6} 将精确匹配六个 'a' 字符,但不是五个。

所以 url 模式应该是:

r'^post/(\d{4})/(\d{1,2})/(\d{1,2})/$'

希望这可以帮助。

于 2012-10-05T05:56:26.337 回答