python - re_path django 3中的正则表达式
问题描述
我的代码的问题是,当我尝试单击帖子页面上的超链接时,我不断收到“找不到页面(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', {})
解决方案
您可以使用path()
语法并轻松获得 slug
path('post/<slug:slug>/', blog_views.post),
如果您仍想使用 re_path ,您应该按照文档编写模式组
re_path(r'^post/(?P<slug>[-a-zA-Z0-9_]+)/$', views.year_archive),
或者您可以使用更具限制性的 slug 正则表达式
[a-z0-9]+(?:-[a-z0-9]+)*
推荐阅读
- sql - 如何选择每个ID的最后一条记录
- json - 为什么 Leaflet Ajax 不处理和显示 GeoJSON 数据?
- sql - 动态生成行而不使用循环
- docker - System.InvalidOperationException:无法将发行版 docker-desktop 部署到 C:\Users\lenova\AppData\Local\Docker\wsl\distro:退出代码:-1
- android - Flutter 是否支持最新的 XCode 12.4 版本?
- mysql - VB.NET MYSQL 使用 MySQL 错误显示数据
- javascript - 如何获取内部定义的变量