【发布时间】:2015-12-31 04:49:30
【问题描述】:
我正在尝试像这样传递配置 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 命名组配置有问题。请帮忙!蒂亚!
更新:如果我删除 URL 配置并将其更改回:
url(r'^details/$', 'news_readr.views.details', name='details'),
错误变为:
使用参数“(1,)”和关键字参数“{}”反转“详细信息” 未找到。尝试了 1 种模式:['details/$']
因此,在这种情况下,它似乎正在接受通过 1 传递的参数。所以这似乎是正则表达式的问题。我在 Pythex 尝试了这个表达式,但即使在那里,这个表达式似乎也不匹配任何东西。
【问题讨论】:
-
arguments '()'是我在使用{% url 'details' article.id %}时遇到的错误与我在{% url 'details' %}/article.id上遇到的完全相同的错误这就是为什么我认为它与 RegEx 或 URLConf 有关 -
{% url 'details' article.id %}匹配 url 模式,只要article.id是一个有效的 id。作为测试,尝试删除 url 标签并在循环中包含{{ article }}和{{ article.id}}以查看它们的输出。 -
article和article.id都很好。我尝试在 url 标签外的屏幕上打印它们。我仍然认为它必须与 URLConf 有关。也许进口或缺少什么我不知道! -
我应该将视图导入到我的 urls.py 中吗?
-
推荐的方法是在你的 urls.py 中导入视图,但这不是问题所在。在 Django 1.10 之前使用该字符串。
标签: python regex django urlconf