【问题标题】:Django URL Dispatcher not matching unicode slugDjango URL Dispatcher 不匹配 unicode slug
【发布时间】:2018-12-10 08:24:48
【问题描述】:

我目前正在尝试使用支持 unicode 的 slug 处理请求。

即“127.0.0.1:8080/æøå/”适用于通用 ListView:

path('<slug>/', ServiceList.as_view(), name='service-list'),

但在 DetailView 上失败,SQL 查询中有 0 个匹配项:

path('<slug>/', ServiceDetail.as_view(), name='service-detail'),

没有给出进一步的错误。我是否错过了请求和数据库(SQLite3)之间的一些 unicode 转换?

【问题讨论】:

  • 我猜ServiceListServiceDetail 没有相同的参数。这是因为如果您可能在参数中使用 pk=None 声明后者。所以它不会匹配给定的网址。但它会匹配127.0.0.1:8080/æøå/:id/

标签: django unicode


【解决方案1】:

添加第二条路径后,Django 很困惑他应该去哪里。要解决它,您必须更改路径。 每条路径必须有唯一的 url

【讨论】:

  • 这是两个独立的示例,不会同时运行。
【解决方案2】:

models.py 中有一个错误。它现在按预期工作。

之前:

def __init__(self, *args, **kwargs):
    super(Service, self).__init__(*args, **kwargs)
    self.slug = text.slugify(self.title, allow_unicode=True)

之后:

def save(self, *args, **kwargs):
    self.slug = text.slugify(self.title, allow_unicode=True)
    super(Service, self).save(*args, **kwargs)

【讨论】:

    猜你喜欢
    • 2014-01-20
    • 1970-01-01
    • 2013-07-19
    • 2020-12-13
    • 2019-08-07
    • 2014-01-18
    • 2015-04-12
    • 2016-04-13
    • 1970-01-01
    相关资源
    最近更新 更多