gpt4 book ai didi

python - 新对象的 NoReverseMatch

转载 作者:太空宇宙 更新时间:2023-11-04 08:00:03 27 4
gpt4 key购买 nike

使用 Django 1.10.4。我有一个模型 Stream,我为其创建了 CreateView。当通过管理面板创建对象时,一切正常,但是当我使用 CreateView 表单时,创建了一个对象(在管理面板中或在数据库中都没有区别),但尝试通过 DetailView 提供指向它的链接导致错误:

NoReverseMatch at /  
Reverse for 'detail_stream' with arguments '()' and keyword arguments '{'pk': 17}' not found.
2 pattern(s) tried: ['(?P<pk>[0-9])/$', 'streams/(?P<pk>[0-9])/$']

这个错误发生在显示ListView的时候,然后只针对通过CreateView创建的对象。
错误发生的地方:

{% for item in stream_list %}
<a href="/streams{% url "detail_stream" pk=item.id %}">
...
</a>
{% endfor %}

当您尝试直接转到 DetailView ( http://127.0.0.1:8000/streams/17 ) 404 错误时。
网址.py:

from django.conf.urls import url    
from .views import StreamDetail, StreamUpdate

urlpatterns = [
url(r'^$', StreamList.as_view(), name='streams'),
url(r'^(?P<pk>[0-9])/$', StreamDetail.as_view(), name='detail_stream'),
url(r'^(?P<pk>[0-9])/update/$', StreamUpdate.as_view()),
]

另外,添加到主站点 urlpatterns 的流的 url。

查看:

class StreamCreate(LoginRequiredMixin, CreateView):
login_url = '/login/'

def form_valid(self, form):
regex = re.compile('[^a-zA-Z]')
newtags = []
for tag in form.cleaned_data['tags']:
tag = regex.sub('',tag)
newtags.append(tag)
form.cleaned_data['tags'] = newtags
return super(StreamCreate,self).form_valid(form)

def form_invalid(self, form):
print(form.errors)
return super(StreamCreate,self).form_invalid(form)

def get_success_url(self):
return reverse('streams')

我怀疑我在 CreateView 时没有意识到某些事情,但我无法理解并需要您的帮助。

最佳答案

您在给定 route 的正则表达式是错误的。

url(r'^(?P<pk>[0-9])/$', StreamDetail.as_view(), name='detail_stream')

[0-9] 表示它需要一个个位数。 17 有两位数字,因此正则表达式需要考虑到这一点(在此处添加 +)

url(r'^(?P<pk>[0-9]+)/$', StreamDetail.as_view(), name='detail_stream')

那里的其他一些路由也有同样的问题。

关于python - 新对象的 NoReverseMatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41717819/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com