Django 将URL设置为使用slug而不是ID

Django 将URL设置为使用slug而不是ID,django,Django,我希望我的URL在django中有slug而不是post ID 这是我的URL.py from django.urls import path, re_path from blog.views import( blog_post_detail_view, blog_post_list_view, blog_post_update_view, blog_post_delete_view,) urlpatterns = [ path('', blog_

我希望我的URL在django中有slug而不是post ID

这是我的URL.py

from django.urls import path, re_path
from blog.views import( 
    blog_post_detail_view, 
    blog_post_list_view,
    blog_post_update_view,
    blog_post_delete_view,)

urlpatterns = [ 
    path('', blog_post_list_view),
    path('<str:slug>/', blog_post_detail_view),
    path('<str:slug>/edit/', blog_post_update_view),
    path('<str:slug>/delete/', blog_post_delete_view), ] 

    models.py

from django.shortcuts import render, get_object_or_404
from django.http import Http404
from .models import BlogPost


def blog_post_list_view(request):
    qs = BlogPost.objects.all()
    template_name = 'blog_post_list.html'
    context = {'object_list': qs}
    return render(request, template_name, context)


def blog_post_create_view(request):
    template_name = 'blog_post_create.html'
    context = {'form': None}
    return render(request, template_name, context)


def blog_post_detail_view(request, slug):
    obj = get_object_or_404(BlogPost, slug=slug)
    template_name = 'blog_post_detail.html'
    context = {"object": obj}
    return render(request, template_name, context)


def blog_post_update_view():
    obj = get_object_or_404(BlogPost, slug=slug)
    template_name = 'blog_post_update.html'
    context = {"object": obj, 'form': None}
    return render(request, template_name, context)

def blog_post_delete_view():
    obj = get_object_or_404(BlogPost, slug=slug)
    template_name = 'blog_post_delete.html'
    context = {"object": obj}
    return render(request, template_name, context
从django.url导入路径,重新设置路径
从blog.views导入(
博客(博文)(详情)(视图),,
博客发布列表视图,
博客发布更新视图,
博客\发布\删除\查看,)
urlpatterns=[
路径(“”,博客文章列表视图),
路径(“/”,博客文章详细信息视图),
路径('/edit/',blog\u post\u update\u view),
路径('/delete/',blog_post_delete_view),]
models.py
从django.shortcuts导入渲染,获取\u object\u或\u 404
从django.http导入Http404
从.models导入BlogPost
def博客文章列表视图(请求):
qs=BlogPost.objects.all()
模板名称='blog\u post\u list.html'
上下文={'object_list':qs}
返回渲染(请求、模板名称、上下文)
def blog_post_create_view(请求):
模板名称='blog\u post\u create.html'
上下文={'form':无}
返回渲染(请求、模板名称、上下文)
def blog_post_detail_视图(请求,slug):
obj=获取对象或404(BlogPost,slug=slug)
模板名称='blog\u post\u detail.html'
上下文={“对象”:obj}
返回渲染(请求、模板名称、上下文)
def blog_post_update_view():
obj=获取对象或404(BlogPost,slug=slug)
模板名称='blog\u post\u update.html'
上下文={“object”:obj,“form”:None}
返回渲染(请求、模板名称、上下文)
def blog_post_delete_view():
obj=获取对象或404(BlogPost,slug=slug)
模板名称='blog\u post\u delete.html'
上下文={“对象”:obj}
返回渲染(请求、模板名称、上下文)
)


我希望读取url而不是第一件事您首先需要向模型中添加slug字段,并通过以下方式为post_details模型创建绝对url:

 class BlogPost(models.Model):
    slug = models.SlugField(null=True, max_length=40,unique_for_date='publish')


  from django.urls import reverse

    def get_absolute_url(self):
    return reverse('blog:post_details',args = [
        self.slug,
    ])
“blog”是您的应用程序名称,“post_details”是您的views.py文件中的详细视图功能 现在将你的应用程序名称包括到你的URL.py文件中

 app_name = 'your-app-name'
更改详细信息视图的URL路径

path('<slug:post>/',views.post_details, name = 'post_details'),
path('/',views.post_details,name='post_details'),

“:post”是您的finctions参数。

首先,您需要向模型中添加slug字段,并通过以下方式为post_details模型创建绝对url:

 class BlogPost(models.Model):
    slug = models.SlugField(null=True, max_length=40,unique_for_date='publish')


  from django.urls import reverse

    def get_absolute_url(self):
    return reverse('blog:post_details',args = [
        self.slug,
    ])
“blog”是您的应用程序名称,“post_details”是您的views.py文件中的详细视图功能 现在将你的应用程序名称包括到你的URL.py文件中

 app_name = 'your-app-name'
更改详细信息视图的URL路径

path('<slug:post>/',views.post_details, name = 'post_details'),
path('/',views.post_details,name='post_details'),

“:post”是您的finctions参数。

请您解释一下函数参数的含义。这是您对post详细信息的看法,def blog_post_detail_view(request,slug):slug是函数中的位置参数。我已经通过了这个职位。您可以将其编辑为:def blog\u post\u detail\u view(request,post):obj=get\u object\u或_404(BlogPost,slug=post),然后URL路径应该是“OK”现在可以了,但您的也可以了。谢谢,请您解释一下函数参数的含义。这是您对帖子详细信息的看法,def blog_post_detail_view(request,slug):slug是函数中的位置参数。我已经通过了这个职位。您可以将其编辑为:def blog\u post\u detail\u view(request,post):obj=get\u object\u或_404(BlogPost,slug=post),然后URL路径应该是“OK”现在可以了,但您的也可以了。非常感谢。