如何解决Django url模式不起作用



我在urls.py和access'中添加了路径('in:pk/',…(http://127.0.0.1:8000/blog/1'

结果是

"找不到页面(404(">
Django使用doit.uls中定义的URLconf,尝试了以下URL模式,顺序如下:

  1. 博客<int:pk>
  2. 博客
  3. 管理员/

当前路径blog/1与其中任何一个都不匹配。

此外,我制作了3 pk内容

请帮帮我,我受了很长时间的苦。

urls.py

from django.urls import path
from . import views
urlpatterns = [
path('<int:pk>/', views.PostDetail.as_view()),
path('', views.PostList.as_view()),
] 

型号.py

from django.db import models
class Post(models.Model):
title = models.CharField(max_length=30)
content = models.TextField()
created_at = models.DateTimeField()

def __str__(self):
return f'[{self.pk}]{self.title}'

视图.py

from django.views.generic import ListView, DetailView
from .models import Post 

class PostList(ListView):
model = Post
ordering = '-pk'
class PostDetail(DetailView):
model = Post

post_list.html

<!DOCTYPE html>
<html lang = "ko">
<head>
<meta charset="UTF-8">
<title>Blog</title>
</head>
<body>

<h1>Blog</h1>
{% for p in post_list %}
<hr/>
<h2> {{ p.title }} </h2>
<p> {{ p.content }}</p>
<h4> {{ p.created_at }} </h4> 
{% endfor %}
</body>
</html>

post_detail.html

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset = "UTF-8">
<title> {{ post.title }} - Blog </title>
</head>
<body>
<nav>
<a href="/blog/">Blog</a>
</nav>
<h1> {{ post.title }} </h1>
<h4> {{ post.created_at }} </h4>
<p> {{ post.content }} </p>
<hr/>
<h3> ... </h3>
</body>
</html>

请尝试这种方式

urlpatterns = [
path('', views.PostList.as_view()),
path('post/<int:pk>/', views.PostDetail.as_view()),
] 

我不知道你是如何构建项目的,但我假设你在应用程序中创建了一个单独的urls.py文件,如果你这样做了,那么你在这个问题中提供的代码中做了一些错误。你没有在urls.py文件中声明app_name,这使得你以后在扩展项目时很难为页面创建链接,也使得你无法访问页面,我将给你一些代码,但请确保你阅读了它,并将其适应你的项目。

这应该是项目文件夹中的urls.py:

from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('your_app_name.urls'))
]

完成后,您应该在应用程序文件夹中创建一个urls.py文件,并使其看起来像这样:

from django.urls import path
from .views import *
app_name = "your_app_name"
urlpatterns = [
path('<int:pk>/', PostDetail.as_view(), name='post_detail'),
path('', PostList.as_view(), name='post_list'),
]

请注意,我更改了导入视图的方式,这样就不需要编写views.PostDetail.as_view(),只需按类名调用即可。我还为每个URL模式添加了一个名称,这样你就可以像我之前提到的那样更容易地创建链接,你可以在HTML中创建一个标签,看起来像这样:

<a href='{% url 'your_app_name:post_list %}'>Blog</a>

通过将这些更改应用到代码中,它可能会很好地工作,但如果没有,请随时与我联系。此外,请尝试了解Django中基于函数的视图,它们更好地使用,因为使用基于类的视图,你会打破Django的DRY(不要重复(概念。

最新更新