【问题标题】:How to solve the Identical URL Pattern Conflict in Django?如何解决 Django 中的相同 URL 模式冲突?
【发布时间】:2021-04-25 13:20:37
【问题描述】:

在 Django 上练习时,我遇到了以下相同 URL 模式的问题。我试过了,没解决。

我的项目有一个应用程序,模型是

class Category(models.Model):
    title = models.CharField(max_length=150)
    slug = models.SlugField(unique=True,blank=True, max_length=255)

class Post(models.Model):
   title = models.CharField(max_length=200)
   cats = models.ForeignKey(Category, on_delete=models.CASCADE)
   slug = models.SlugField(unique=True,blank=True, max_length=255)

我的 urls.py

from django.contrib import admin
from django.urls import path
from post import views as apps

urlpatterns = [
    path('admin/', admin.site.urls),
    path('<slug:slug>/', apps.categoryView, name='category'),
    path('<slug:slug>/',apps.PostView, name='calc_detail'),
] 

问题:

当我在类别视图的 urlpattern 的第二行中输入“/”时,类别视图有效,但后视图无效 (404)。

如果删除 CategoryView 的 '/' urlpattern,则 post view Works 但 Category Views 显示 404。

我应该如何配置这些网址。我正在使用基于函数的视图

【问题讨论】:

    标签: django django-models django-views django-urls


    【解决方案1】:

    除了使用不同的模式或在同一个视图中处理两者之外,真的没有办法处理这些,我建议使用不同的模式:

    from django.contrib import admin
    from django.urls import path
    from post import views as apps
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('pattern1/<slug:slug>/', apps.categoryView, name='category'),
        path('pattern2/<slug:slug>/',apps.PostView, name='calc_detail'),
    ]
    

    你也想过如果一个帖子和一个类别最终有相同的 slug 会发生什么?最好有不同的模式。
    关于放置 '/' 使某些 url 工作,而不是因为 django 默认情况下会在每个 url 上附加斜杠,所以如果你真的想这样做 (不推荐) 你可以在你的设置 APPEND_SLASH = False设置并有一个带有斜杠的网址,其他没有。

    【讨论】:

    • 如果我确实将 slug 字段设置为类别的 CharField 并将 url 模式设置为这样的路径('/',apps.categoryView,name='category'),会不会工作??
    • 谢谢。然后我如何生成像“关于”或其他的静态页面
    • 你为他们写一个视图和一个 url 模式。
    • 我尝试过使用简单的 url 模式路径('about',apps.aboutView, name='about'),它适用于不带 '/' 的附加。如果我把'/'放在最后,它会显示404。:(我现在很困惑
    • 我把静态页面放在了 url 模式的最后一行。那个时候是行不通的。把它放在主页后面的第三行之后,它就可以工作了。非常感谢朋友
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 2016-04-11
    • 2011-05-12
    • 2018-05-15
    • 2019-12-22
    • 1970-01-01
    • 2012-01-09
    相关资源
    最近更新 更多