Django NoReverseMatch [英] Django NoReverseMatch
问题描述
它在我的项目中不起作用,但在练习中,一切都很好。
错误讯息: NoReverseMatch at /
反向'events.views.event_detail'与参数'()'和关键字参数'{u'pk':3}'未找到。 1个模式尝试:['$ event /(?P< pk> [0-9] +)/ $']
HTML(片段)
< div class =col -xs-6>< a class =btn btn-primaryhref ={%url'events.views.event_detail'pk = event.pk%}>阅读更多< / a>< / DIV>
< / div>
settings.py
ROOT_URLCONF ='mysite.urls'
app urls.py
from django.conf.urls import include,url
from。导入视图
urlpatterns = [
url(r'^ $',views.events_list),
url(r'^ event /(?P< pk> [0- 9] +)/ $',views.event_detail),
]
app view.py
from django.shortcuts import render,get_object_or_404
from django.utils import timezone
from .models import Event
def events_list(request):
events = Event.objects.filter(published_date__lte = timezone.now())。order_by('published_date')
return render(request,'events / events_list.html',{'events':events})
def event_detail(request,pk):
event = Event.objects .get(pk = pk)
return render(request,'events / event_detail.html',{'event':event})
你没有显示你的mysite.urls,但是从错误消息看,你已经做了这样的事情:
(r'^ events / $',include('events.urls')),
你需要删除终止$因为这意味着正则表达式的结束;没有什么可以匹配之后。它应该是:
(r'^ events /',include('events.urls')),
请注意,您还应该提供事件URL名称,以便更容易参考:
url(r'^ $',views.events_list,name ='events_list'),
url(r'^ event /(?P< ; pk> [0-9] +)/ $',views.event_detail,name ='event_detail'),
,以便您现在可以执行以下操作:
{%url'event_detail'pk = event.pk%}
I can't understand what's wrong? I tried to make a detail page of one item, like in example on http://tutorial.djangogirls.org/en/extend_your_application/index.html and It doesn't work in my project, but In exercises everything was good.
Error message: NoReverseMatch at /
Reverse for 'events.views.event_detail' with arguments '()' and keyword arguments '{u'pk': 3}' not found. 1 pattern(s) tried: ['$event/(?P<pk>[0-9]+)/$']
HTML(fragment)
<div class="col-xs-6"><a class="btn btn-primary" href="{% url 'events.views.event_detail' pk=event.pk %}">Read more</a></div>
</div>
settings.py
ROOT_URLCONF = 'mysite.urls'
app urls.py
from django.conf.urls import include, url
from . import views
urlpatterns = [
url(r'^$', views.events_list),
url(r'^event/(?P<pk>[0-9]+)/$', views.event_detail),
]
app views.py
from django.shortcuts import render, get_object_or_404
from django.utils import timezone
from .models import Event
def events_list(request):
events = Event.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
return render(request, 'events/events_list.html', {'events': events})
def event_detail(request, pk):
event = Event.objects.get(pk=pk)
return render(request, 'events/event_detail.html', {'event': event})
You haven't shown your mysite.urls, but from the error message it looks like you have done something like this:
(r'^events/$', include('events.urls')),
You need to drop the terminating $, since that means the end of the regex; nothing can match after that. It should be:
(r'^events/', include('events.urls')),
Note that you should also give your event URLs names, to make it easier to reference:
url(r'^$', views.events_list, name='events_list'),
url(r'^event/(?P<pk>[0-9]+)/$', views.event_detail, name='event_detail'),
so that you can now do:
{% url 'event_detail' pk=event.pk %}
这篇关于Django NoReverseMatch的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!