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

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

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

在我的 URLconf 中,我输入了 url(r'^(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{1,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>\d{4})/(?P<month>\d{1,2})/$',
    MonthArchivePostView.as_view()
),

在通用视图中

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

【问题讨论】:

    标签: django internationalization translation


    【解决方案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
    猜你喜欢
    • 2016-05-02
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    相关资源
    最近更新 更多