捕获 yyyy-mm-dd 日期的 Django url

Posted

技术标签:

【中文标题】捕获 yyyy-mm-dd 日期的 Django url【英文标题】:Django url that captures yyyy-mm-dd date 【发布时间】:2017-05-03 22:20:19 【问题描述】:

如何在 Django 中捕获包含 yyyy-mm-dd 的 url。所以就像 www.mydomain.com/2011-02-12。我试过了:

url(r'^(?P<date>\d4-\d2-\d2)/$', views.index, name='index'), 

但是,服务器说找不到页面。

【问题讨论】:

【参考方案1】:

在 Django 3.0.5 中,我使用以下 urls.py 完成此操作

from django.urls import path, register_converter
from datetime import datetime
from . import views

class DateConverter:
    regex = '\d4-\d2-\d2'

    def to_python(self, value):
        return datetime.strptime(value, '%Y-%m-%d')

    def to_url(self, value):
        return value

register_converter(DateConverter, 'yyyy')

urlpatterns = [
    path('', views.index, name='index'),
    path('date/<yyyy:date>/', views.date, name='date'),
]

【讨论】:

很好,与公认的答案相比,这适用于 Django 3.1【参考方案2】:

试试这个:

url(r'^(?P<date>[0-9]4-?[0-9]2-?[0-9]2)/$', views.index, name='index'),

【讨论】:

【参考方案3】:

你应该在 url 模式中有一个组名:

url(r'^(?P<date>\d4-\d2-\d2)/$', views.index, name='index'),
#          ^^^^

还要注意 url 中的尾部斜杠:www.mydomain.com/2011-02-12/。如果您不想在 url 中使用斜杠,可以将其从模式中删除。


然后您的视图函数会将组的名称作为其参数之一

def index(request, date):
    ...

你应该看到docs on Django url named groups

【讨论】:

虽然这一切都是正确的,但都不会导致问题中报告的“未找到”错误。 @DanielRoseman 尾部斜杠会。问题中的模式包括尾部斜杠,而 URL 不包括。 我的正则表达式是否真的捕获了 yyyy-mm-dd?

以上是关于捕获 yyyy-mm-dd 日期的 Django url的主要内容,如果未能解决你的问题,请参考以下文章

Django 过滤 DateFilter 的自定义日期格式

如何在django中的模型中定义日期格式?

Django将字符串保存到日期字段

如何在 Django DateField 中仅保留日期部分

Django --- 常用字段及参数

如何把日期改成yyyy-mm-dd