0

我正在学习 Django 的国际化和本地化方式。为此,我正在关注本教程:

http://www.marinamele.com/taskbuster-django-tutorial/internationalization-localization-languages-time-zones

我遇到的问题是教程建议的测试不起作用。此外,我看不出它是如何工作的。

这是相关的模板位

  <div class="row">
    <div class="col-md-4">
      <h2 id="local-date">{{today}}</h2>
      <p>This is the time using your local information. </p>
      <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p>
    </div>
    <div class="col-md-4">
      <h2 id="non-local-date">{{today|unlocalize}}</h2>
      <p>This is the default time format. </p>
      <p><a class="btn btn-default" href="#" role="button">View details &raquo;</a></p>
   </div> 

视图如下

from django.shortcuts import render
import datetime

def home(request):
    today = datetime.date.today()
    return render(request, "taskbuster/index.html", {'today': today})

测试如下

def test_localization(self):
    today = date.today()
    for lang in ['en', 'ca']:
        activate(lang)
        self.browser.get(self.get_full_url("home"))
        local_date = self.browser.find_element_by_id("local-date")
        non_local_date = self.browser.find_element_by_id("non-local-date")
        self.assertEqual(formats.date_format(today, use_l10n=True),
                              local_date.text)
        self.assertEqual(today.strftime('%Y-%m-%d'), non_local_date.text)

我看到的失败是

    self.assertEqual(today.strftime('%B %d, %Y'), non_local_date.text)
AssertionError: 'June 22, 2019' != 'jun. 22, 2019'
- June 22, 2019
? ^  ^
+ jun. 22, 2019

? ^ ^

如您所见,加泰罗尼亚语版本与默认的非本地化版本不同。我在这里遗漏了一些明显的东西吗?这些位在 Django 中的工作方式是否发生了变化,导致了这个失败?教程的作者声称在教程的这一点上这个测试应该通过。

PS 如果添加其他更有趣的语言,其中有更符合逻辑的日-> 月-> 年格式来显示日期,他也可以观察到这种失败。考虑以下情况ru

AssertionError: '22 June, 2019' != 'Июнь 22, 2019'
- 22 June, 2019
+ Июнь 22, 2019
4

1 回答 1

2

我也一直在学习 Marina Mele Django 教程。我发现它有很多问题。对于日期本地化部分,我花了几个小时才发现教程中的 index.html 需要同时具有以下加载语句才能处理日期本地化和翻译,如下所示:

{% extends "base.html" %}
{% block head_title %}TaskBuster Django Tutorial{% endblock %}
{% load i18n %}
{% load l10n %}

{% block content %}

没有这个,你会得到一个“无效的过滤器”错误。我不确定这是否能解决您遇到的问题,但这是一个示例,说明虽然本教程总体上非常好,但您尝试执行所有内容时遇到的问题可能是由于教程中的错误或遗漏(在某些情况下,可能是因为您必须作为项目的一部分安装的较新版本的软件包不兼容)......至少,这提供了有用的(如果令人沮丧的)调试实践!

于 2019-08-01T21:57:47.913 回答