python - django 中的 slug 上的 404

标签 python django slug

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

<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/

相关文章:

python - pycharm中的PyAudio

python - Django 表单操作属性无法正常工作

url - 在 seo 的 slug url 中使用单词的首字母缩略词是一种好习惯吗?

django - 如何在 Django 中创建 unique_for_field slug?

python - 如何在 tkinter 中重置按钮上的图像?

python - cross_val_score 和 StratifiedKFold 给出不同的结果

python - Python中的Url解码UTF-8

sql - 从大表中获取每个 parent 的最新 child - 查询太慢

django - 从 iPhone 应用程序和移动浏览器注册并登录到 django 后端

用于生成 slug 的 Java 代码/库(用于漂亮的 URL)