Django模板和URLconf中的日期转换

时间:2012-02-16 21:11:00

标签: django internationalization translation

我在设置文件中设置了法语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())

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

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

谢谢


更新快速解决方案 - 不是真正的解决方案:在任何地方使用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'

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

正如@jkbr已经说过的那样,unlocalize应该可以胜任。

除此之外,您是否曾考虑在条目模型的模型定义中添加函数'get_absolute_url(self)',而不是在模板中定义网址?

最好将分离的内容定义(模型)与内容呈现(模板)保持一致。

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

尝试在输入模型的末尾添加与此类似的功能:

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>