我如何在Django中正确使用子弹网址?

问题描述 投票:1回答:1

你好,我是Django的新手,我正在尝试建立一个网站。在管理页面http://127.0.0.1:8000/admin/posts/post/,我添加了两个帖子,一个是have,**第一个是第一,第二个是第二问题是,当我尝试到达http://127.0.0.1:8000/posts/firsthttp://127.0.0.1:8000/posts/second时,它给我一个404错误,它告诉我**

[使用custom.urls中定义的URLconf,Django尝试了这些URL模式,按此顺序:

admin/
posts/ [name='posts_list']
<slug>

当前路径,帖子/第一,与任何这些都不匹配。

这是models.py

from django.db import models
from django.conf import settings
Create your models here.

User = settings.AUTH_USER_MODEL

class Author(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    email = models.EmailField()
    phone_num = models.IntegerField(("Phone number"))

    def __str__(self):
       return self.user.username

class Post(models.Model):
    title = models.CharField(max_length=120)
    description = models.TextField()
    slug = models.SlugField()
    image = models.ImageField()
    author = models.OneToOneField(Author, on_delete=models.CASCADE)


    def __str__(self):
        return self.title

这是views.py

from django.shortcuts import render, get_object_or_404
from .models import Post
# Create your views here.


def posts_list(request):
    all_posts = Post.objects.all()
    return render(request, 
                  "posts/posts_list.html", 
                  context = {"all_posts": all_posts})


def posts_detail(request, slug):
    unique_slug = get_object_or_404(Post, slug = slug)

    return render(request, "posts/posts_detail.html", {"post": unique_slug})

这是urls.py

from django.contrib import admin
from django.urls import path
from posts.views import posts_list, posts_detail
urlpatterns = [
        path('admin/', admin.site.urls),
        path("posts/", posts_list, name = "posts_list"),
        path("<slug>", posts_detail), #, name = "unique_slug"
    ]

这是这些模板:posts_list.html

<!DOCTYPE html>
<html>
    <head>
        <title>
        </title>
    </head>
    <body>
        {{ all_posts }}
    </body>
</html>

post_detail.html

<!DOCTYPE html>
<html>
    <head>
        <title>
        </title>
    </head>
    <body>
        {{ post }}
    </body>
</html>
python html django url slug
1个回答
1
投票
A slug绝不包含斜杠。您的网址似乎以posts/为前缀。因此,您可以使用以下方法更改urls.py

from django.contrib import admin from django.urls import path from posts.views import posts_list, posts_detail urlpatterns = [ path('admin/', admin.site.urls), path('posts/', posts_list, name='posts_list'), path('posts/<slug:slug>/', posts_detail, name='unique_slug'), ]

最好添加路径转换器的类型,所以<slug:slug>

您可能想使用django-autoslug [GitHub]根据特定字段自动构建一个条。

© www.soinside.com 2019 - 2024. All rights reserved.