Django 模板和 URLconf 中的日期翻译

Posted

技术标签:

【中文标题】Django 模板和 URLconf 中的日期翻译【英文标题】:Date translation in Django templates and URLconf 【发布时间】:2012-03-08 07:32:36 【问题描述】:

我在设置文件中有一个用法语设置的 django 网站。

在我的模板中,我有以下条目<a href="/ year / month|date:"b" /"> month|date:"F" </a>

在我的 URLconf 中,我输入了 url(r'^(?P<year>\d4)/(?P<month>\w3)/(?P<day>\d1,2)/$',MonthArchivePostView.as_view())

问题是在模板中,生成的日期是法语的(例如,对于二月,我有 <a href="/2012/fév/">Février</a>),但 url 需要英文版本(/2012/feb/)。

我不介意在网址中使用英文或法文的日期,我只需要在模板中生成相同的日期并在 URLconf 文件中进行预期。

谢谢


更新 quick-fix-not-really-a-solution :在任何地方使用 m 格式而不是 b 以使用 /02/ 而不是 /feb/

所以在 urls.py 中

url(r'^(?P<year>\d4)/(?P<month>\d1,2)/$',
    MonthArchivePostView.as_view()
),

在通用视图中

class MonthArchivePostView(dates.MonthArchiveView):
    model = Post
    month_format = '%m'
    date_field = 'publish'

【问题讨论】:

【参考方案1】:

您可以使用unlocalize 来避免模板中的本地化。

【讨论】:

如何与month|date:"b" 结合使用? month|unlocalize|date:"b" 输出一个空字符串,month|date:"b"|unlocalize 没有效果(还是法语) 那么不妨试试这个:% localize off % month|date:"b" % endlocalize % 奇怪的是,% localize off % 没有效果,即使只是在 month 上也是如此。另一方面, month|unlocalize 有效(只是格式不正确)。也许是一个错误 我刚刚在 irc 上问过,我们不能像我一样链接过滤器。建议是使用自定义标签或在视图中处理它。 好的,当我不想本地化某些数字时,我通常使用unlocalize,所以我认为它也适用于日期。很好。【参考方案2】:

正如@jkbr 已经说过的,unlocalize 应该可以完成这项工作。

除此之外,你有没有想过在你的入口模型的模型定义中添加一个函数'get_absolute_url(self)',而不是在模板中定义url?

最好将内容定义(模型)与内容表示(模板)分开。

它还可以帮助您解决问题。

尝试在你的入门模型末尾添加一个类似的函数:

def get_absolute_url(self):
    from time import strftime
    return "%s%s" % (settings.SITE_URL,strftime("%Y/%b/",self.creation_date))

这应该可以工作(如果我理解正确的话,它是关于显示数据而不是解析数据,如 Django 文档的Format localization 部分所述。

然后在您的模板中,您可以执行以下操作:

<a href="entry.get_absolute_url"> month|date:"F" </a>

【讨论】:

谢谢,但我不知道该怎么做。我使用通用类(参见我的更新),所以我真的没有月份档案的模型。我使用模型 Post 我有一个函数 get_absolute_url 就像解释 here 通用类视图 returns 只有一个 DateQuerySet 和年份,没有模型。我使用的是泛型类,因为它应该更快更容易,但我不确定了。此外,get_absolute_url must 仅包含 ascii 字符,因此 /2012/Feb/ 而不是 /2012/fév/。或者可能是/2012/f%C3%A9v/,但不是那么好...... 如果你对 url 使用 slugs 会更好,并避免使用非 ascii 字符。模板标签slugify 也可用于模型定义中,从django.template.defaultfilters 导入slugify,如上所述here

以上是关于Django 模板和 URLconf 中的日期翻译的主要内容,如果未能解决你的问题,请参考以下文章

将模板变量从 URL 传递到 Django 中的 FormPreview

Django - - 基础 - - Django的路由系统

02-URLConf调度器

django路由分配及模板渲染

如何在我的模板中使用 Django DeleteView

django - 如何使翻译工作?