我正在尝试通过配置这样的URL:
/details/12345
模板HTML:
<div class="row">
{% if article_list %}
{% for article in article_list %}
<div>
<h2>{{ article.title }}</h2>
<p>{{ article.body }}</p>
<p><a class="btn btn-default" href="{% url 'details' article.id %}" role="button">View details »</a></p>
</div><!--/.col-xs-6.col-lg-4-->
{% endfor %}
{% endif %}
</div><!--/row-->
urls.py(完整):
from django.conf import settings
from django.conf.urls import include, url
from django.conf.urls.static import static
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^$', 'news_readr.views.home', name='home'),
url(r'^details/(?P<article_id>\d+)/$', 'news_readr.views.details', name='details'),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
views.py:
from django.shortcuts import render
from .models import Article
# Create your views here.
def home(request):
title = "Home"
article_list = Article.objects.all()
for article in article_list:
print(article.id)
context = {
"title": title,
"article_list": article_list,
}
return render(request, "home.html", context)
def details(request, article_id = "1"):
article = Article.objects.get(id=article_id)
return render(request, "details.html", {'article': article})
我收到的错误是:
NoReverseMatch at /
Reverse for 'details' with arguments '()' and keyword arguments '{}'
not found. 1 pattern(s) tried: ['details/(?P<article_id>\\d+)/$']
我在Django一周大了,我认为我的URL命名组配置有问题。请帮忙! TIA!
更新:如果我删除了URL配置并将其更改回:
url(r'^details/$', 'news_readr.views.details', name='details'),
错误更改为:
反转&#39;详细信息&#39;参数&#39;(1,)&#39;和关键字参数&#39; {}&#39; 未找到。尝试了1种模式:[&#39; details / $&#39;]
因此,在这种情况下似乎正在接受传递1
的参数。所以这似乎是正则表达式的一个问题。我在Pythex尝试了表达式,但即使在那里,表达似乎也不匹配任何东西。
答案 0 :(得分:2)
对于网址格式
url(r'^details/(?P<article_id>\d+)/$', 'news_readr.views.details', name='details'),
使用标签的正确方法是
{% url 'details' article.id %}
这是因为details
网址格式有一个组article_id
,因此您必须将其传递给代码。
如果您有上述网址格式,并且{{ article.id}}
在模板中正确显示,则上述模板标记不应提供错误Reverse for 'details' with arguments '()'
。这表明您没有更新代码,或者在更改代码后没有重新启动服务器。
如果您将网址格式更改为
url(r'^details/$', 'news_readr.views.details', name='details')
然后您需要从url标记中删除article.id
。
{% url 'details' %}
答案 1 :(得分:1)
我猜你的模式是错误的。(不是正则表达式的专家)。 试试这个
url(r'^details/((?P<article_id>[0-9]+)/$', 'news_readr.views.details', name='details'),