Я пытаюсь создать многоязычный веб-сайт, который будет получать контент из БД на основе выбранного языка.Для этого я использую i18n_patterns
и поэтому могу легко получить выбранный язык, используя get_language()
в представлении.
Прямо сейчас мои модели выглядят так (упрощенно):
class Article(models.Model):
author = models.CharField("Author", max_length=255)
class ArticleText(models.Model):
id = models.OneToOneField(Article, on_delete=models.CASCADE, primary_key=True)
en = models.TextField("English")
fr = models.TextField("French")
Моя идея (основанная на исследовании SO) заключалась в том, что я буду хранить текст статьи в другом месте, связывая еепервичный ключ к фактическому первичному ключу Article
.
Модель Article
содержит только общую информацию (дату публикации, автора и т. д.), которая одинакова для всех языков.Однако я не совсем уверен, как получить доступ к данным из моего шаблона.Прямо сейчас я использую:
context["articles"] = models.Content.objects.select_related("id")
Затем я могу получить доступ к различным полям в моем шаблоне, используя
{% for article in articles %}
<h3>{{ article.author }} - {{ article.fr }}</h3>
{% endfor %}
Однако я хочу, чтобы язык ({{ article.$LANGUAGE }}
) менялся в зависимости отвыбранный язык.Что-то вроде
{{ article.$get_current_language }} --> {{ article.fr }}
Я думаю, я мог бы сделать следующее в шаблоне:
{% if get_current_language == en %}
{{ article.en }}
{% elif get_current_language == fr %}
{{ article.fr }}
{% endif %}
Но я думаю, что это некрасиво делать в шаблоне - я бы лучше сделал это ввид и просто передать его в шаблон.К сожалению, я не имею ни малейшего представления о том, как передать все объекты статьи и их относительные тексты на правильном языке, и таким образом, чтобы я мог их циклически просматривать.
Могу ли япереосмысление вещей, и я должен просто использовать блок if в шаблоне, или есть лучший способ сделать это?