【问题标题】:Regex in re_path django 3 [closed]re_path django 3中的正则表达式[关闭]
【发布时间】:2020-07-10 00:04:13
【问题描述】:

我的代码的问题是,当我尝试单击帖子页面上的超链接时,我不断收到“找不到页面 (404) 错误,路径 'post/...' 不匹配”。我发了3个帖子。它可能是正则表达式吗?因为我目前不擅长正则表达式。 如何将 views.py 与 urlpatterns 中的正确路径匹配?

我的 urls.py 是:

from django.contrib import admin
from django.urls import path, re_path

from blog import views as blog_views

urlpatterns = [
    path('post/', blog_views.post),
    
    re_path(r'^post(.*)/$', blog_views.post),

    path('about/'. blog_views.about),

    path('', blog_views.index),

    path('admin/', admin.site.urls)
]

我的views.py是:

from django.shortcuts import render,get_object_or_404
from django.http import HttpResponse

from .models import Post

def index(request):
    posts = Post.objects.all()
    return render(request,'index.html', {'posts': posts})

def post(request, slug):
    print(slug)
    return render ('post.html',{'post': get_object_or_404(Post, slug=slug)})

def about(request):
    return render(request, 'about.html', {})

【问题讨论】:

  • 你有re-path而不是re_path。不确定这是否是整个问题,但需要修复。
  • 你甚至没有解释错误是什么。
  • 我已经编辑并更正了错字。

标签: python python-3.x django regex


【解决方案1】:

您可以使用path() 语法并轻松搞定

path('post/<slug:slug>/',  blog_views.post),

如果你仍然想使用 re_path,你应该把模式组写成documented

re_path(r'^post/(?P<slug>[-a-zA-Z0-9_]+)/$', views.year_archive),

或者你可以使用更严格的 slug 正则表达式

[a-z0-9]+(?:-[a-z0-9]+)*

【讨论】:

  • 我已经尝试过你的解决方案,但我得到一个 TypeError->join() 参数必须是 str、bytes 或 os.PathLike 对象,而不是 'dict'
猜你喜欢
  • 2018-09-03
  • 2020-10-31
  • 2019-12-26
  • 2016-11-07
  • 1970-01-01
  • 2021-08-06
  • 2015-04-27
  • 1970-01-01
  • 2013-03-08
相关资源
最近更新 更多