gpt4 book ai didi

python - django 中的 slug 上的 404

转载 作者:行者123 更新时间:2023-12-01 02:14:17 29 4
gpt4 key购买 nike

我正在遵循一个教程,他们做了这样的事情:

<a href="{ % url 'films:add_comment' slug=film.slug %}">Leave a comment</a>

他们使用蛞蝓。我没有这样做,但一直在引用一个ID。我认为对此很重要的代码部分是:

电影/urls.py:

from django.conf.urls import url
from django.urls import path
from . import views


app_name = 'films'
urlpatterns = [
path('', views.index, name='index'),
url(r'^films/<int:film_id>/comment/', views.add_comment, name='add_comment'),
path('films/<int:film_id>/', views.detail, name='detail'),
]

电影/views.py

def add_comment(request, film_id):
film = get_object_or_404(Film, pk=film_id)
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit = False)
comment.post = post
comment.save()
return redirect('film:detail',film)
else:
form = CommentForm()
template = 'films/add_comment.html'
context = {'form':form}
return render (request,template,context)

mysite/urls.py:

urlpatterns = [
url(r'^accounts/',include('accounts.urls')),
url(r'^', include('films.urls')),
url(r'^admin/', admin.site.urls),
]

add_comment.html:

{% extends 'base_layout.html' %}
{% block content %}

<div class="create-comment">
<h2>Add Comment</h2>

</div>

{% endblock %}

如果我点击我创建的链接:<a href="{ % url 'films:add_comment' film.id %}">Leave a comment</a>

我明白了: enter image description here

如果我手动将 url 更改为

http://127.0.0.1:8000/films/2/comment/

我明白了:

enter image description here

但看起来该列表中的 url 3 与我输入的内容相符?

最佳答案

你们离得很近。我认为只是一些小错误:

(最终工作编辑)

电影/urls.py

urlpatterns = [ 
path('', views.index, name='index'),
path('<int:film_id>/comment', views.add_comment, name='add_comment'),
path('<int:film_id>', views.detail, name='detail'),
]

mysite/urls.py

urlpatterns = [ 
url('films/', include('films.urls')),
url('accounts/',include('accounts.urls')),
url('admin/', admin.site.urls),
]

(锻炼)

<小时/>

电影/urls.py:

app_name = 'films'
urlpatterns = [
url(r'^films/(?P<film_id>\d+)/comment/', views.add_comment, name='add_comment'),
]

通知:(?P<film_id>\d+)这就是捕获正确标识符的方法

<小时/>

这是不正确的:

<a href="{ % url 'films:add_comment' film.id %}">Leave a comment</a>

应该是:

<a href="{% url 'films:add_comment' film_id=film.id %}">Leave a comment</a>

  • 请注意 {% 中没有间隙
  • 我们现在使用上面 urls.py 中定义的标识符。
<小时/>

您的def add_comment(request, film_id):让我有点困惑,但是请尝试一下我的建议。然后对发生的任何问题发表评论,我们将解决此问题!

<小时/>

编辑:好吧,接下来的小错误可能会阻碍您

urlpatterns = [
path(r'^$', views.index, name='index'),
path(r'^films/<int:film_id>/comment/$', views.add_comment, name='add_comment'),
path(r'^films/<int:film_id>/$', views.detail, name='detail'),
]
  • 将所有第一个参数字符串设为正则表达式字符串,即 'foo' -> r'foo'
  • 根据the v2 release notes ,您需要使用path( )用你的酷<int:film_id>句法。 url()不会悲伤地去做☹️
  • 以“$”结束正则表达式,这意味着字符串结束。阻止匹配films/2/commentfilms/2/

关于python - django 中的 slug 上的 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48471964/

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