我计划在管理页面中添加更改语言下拉列表。
根据{{3}}和this code。
我复制base_site.html
并将其复制到myapp/templates/admin
,我创建一个名为change_language.html
的html文件并在其中编写此代码:
{% load i18n %}
/ {% trans 'Change language' %}
<form action="/i18n/setlang/" method="post" style="display: inline;">
<div style="display: inline;">
<select name="language" onchange="javascript:form.submit()">
{% for lang in LANGUAGES %}
<option value="{{ lang.0 }}"{% ifequal LANGUAGE_CODE lang.0 %} selected="selected"{% endifequal %}>{{ lang.1 }}</option>
{% endfor %}
</select>
</div>
</form>
我在此文件的顶部添加了{% extends 'admin/base_site.html' %}
,注意到了
我添加了{% extends 'admin/base.html' %}
,再次注意到了
所有提示和答案都说我们应该在<div id="user-tools">
的第25行更改名称base.html
,但在Django 1.10中,它会使用不同的工作人员进入第31行。 im kinnda因为我读了很多不同的工作人员,而且他们中的任何一个都没有为我工作。任何知道我做错了什么?
这是我的中间件:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
模板设置:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR,'templates'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
答案 0 :(得分:2)
在您的templates / admin文件夹中,确保该文件名为 base_site.html (否则将不会覆盖默认的base_site)。
确保从django-repo。
复制最新版本的文件最重要的是:验证您是否扩展了管理员base.html(您的base_site.html应该以{{1}}开头)
您现在可以添加表单(例如添加到页脚):
{% extends "admin/base.html" %}
请参阅base.html以找到适合您表单的块。
您还需要将i18n urls添加到您的网址设置
{% extends "admin/base.html" %}
{% load i18n %}
{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
{% endblock %}
{% block nav-global %}{% endblock %}
{% block footer %}
<div id="footer">
<form action="/i18n/setlang/" method="post">
{% csrf_token %}
<select name="language">
{% for lang in LANGUAGES %}
<option value="{{ lang.0 }}"
{% ifequal lang.0 request.LANGUAGE_CODE %}
selected="yes"
{% endifequal %}
>{{ lang.1 }}</option>
{% endfor %}
</select>
<input type="submit" value="{% trans 'Change language' %}" />
</form>
</div>
{% endblock %}
如果您真的想使用javascript提交表单,您还需要获取并提交表单的csrf标记。 django docs涵盖了这个主题非常全面。
答案 1 :(得分:1)
我猜你正在混合你在互联网上找到的两个答案。其中一个从管理模板中复制并更改了几个文件,有效地将它们覆盖在程序的参考文件中。第二个扩展了管理员的模板。你应该完全实现其中一个。
答案 2 :(得分:1)
除了Kim的回答,您还应该在django设置django.template.context_processors.i18n
中添加 i18n 上下文处理器,以便能够访问模板中的 LANGUAGES 变量。 / p>