django - 不能有一个带有“媒体”这个词的蛞蝓。姜戈
问题描述
设置
我有一个非常简单的应用程序,其中主页显示项目列表,如果您单击一个项目,您将进入项目详细信息。这是此类项目的模型的一部分:
# 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
,工作得很好。
解决方案
推荐阅读
- python - 使用 pyproject.toml 和 flake8 指定每个文件忽略
- entity-framework - 根据对象 ID ASP.net core MVC 在 View 中返回对象详细信息
- python - 可变长度 numpy 数组的 Pandas 列,基于数组的 dict 查找创建新数组
- flutter - 'package:flutter/src/widgets/widget_inspector.dart':断言失败:第 894 行 pos 16:'index == parameters.length':不正确
- python - 如何在一行中的两列匹配的条件下合并两个不同的数据框内容
- apache-spark - Spark 3.0 timeStamp 解析在传递格式后不起作用
- palantir-foundry - 有没有办法填充特定于数据集的列描述?
- swift - Swift 代码初学者... If-Statement 预期声明
- chef-infra - Chef 中的 yum_package 资源无法在 CentOS 8 上运行
- android - 反应原生android错误:org.apache.commons.compress.compressors.CompressorException:无法创建CompressorInputStream