首页 > 解决方案 > 不能有一个带有“媒体”这个词的蛞蝓。姜戈

问题描述

设置

我有一个非常简单的应用程序,其中主页显示项目列表,如果您单击一个项目,您将进入项目详细信息。这是此类项目的模型的一部分:

# projects/models.py

class Project(models.Model):
    ...
    title = models.CharField(max_length=100, unique=True)
    slug = AutoSlugField(populate_from="website_title", always_update=True)
    ...

如您所见,该项目的 slug 是根据名称确定的(它删除了空格、特殊字符等)

现在,在我的urls.py我有以下内容:

# projects/urls.py 
urlpatterns = [
    path("", ProjectListView.as_view(), name="home"),
    path("<slug:slug>", ProjectDetailView.as_view(), name="project"),
]

问题

问题是,如果项目名称中(开头)包含单词 media,那么生成的路径将返回错误。例如,如果调用了一个项目,MediaCMS那么服务器将尝试以下 url https://builtwithdjango.com/mediacms,但它会返回一个错误(如下)。

图片

我发现的解决方法是在项目名称中添加下划线(即_MediaCMS)。

问题显然是由于项目 slug 和 之间的某种混合和匹配MEDIA_URL,对我来说如下:

# builtwithdjango/settings.py
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media/")

笔记

有趣的是,当在本地服务器上时,这不是问题。以下 url http://127.0.0.1:8000/mediacms,工作得很好。

标签: djangodjango-urls

解决方案


推荐阅读