internationalization - Django1.10 -/i18n/setlang/CSRF token 丢失或不正确

标签 internationalization csrf django-1.10

在语言切换器表单中选择语言后,我收到 CSRF 错误:

表单位于base.html

<form action="{% url 'set_language' %}" method="post" class="form-inline">
  {% csrf_token %}
  <input name="next" type="hidden" value="" />
  <div class="form-group">
    <div class="input-group">
      <div class="input-group-addon"><i class="fa fa-globe" aria-hidden="true"></i></div>
      <select name="language" class="form-control" id="lang-switcher">
        {% get_current_language as LANGUAGE_CODE %}
        {% get_available_languages as LANGUAGES %}
        {% get_language_info_list for LANGUAGES as languages %}
        {% for language in languages %}
          <option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}>
            {{ language.name_local }} ({{ language.code }})
          </option>
        {% endfor %}
      </select>
    </div>
  </div>
</form>

我用JS提交表单:

jQuery('#lang-switcher').change(
    function(){
        jQuery(this).closest('form').trigger('submit');
    });

我的模板文件art.html如下:

{% extends "base.html" %}
{% load staticfiles %}
{% load i18n %}

{% block content %}
  ....
{% endblock %}

views.py如下:

from django.template import RequestContext
from django.shortcuts import render_to_response

from .models import Exhibition, Picture

def index(req):
  highlight = Exhibition.objects.latest()
  exhibitions = Exhibition.objects.all()[1:]
  return render_to_response('art.html', RequestContext(req,{'highlight': highlight, 'exhibitions': exhibitions}))

urls.py如下:

urlpatterns = [
  url(r'^i18n/', include('django.conf.urls.i18n')),
  url(r'^admin/', admin.site.urls),
  url(r'^art/', index),
  url(r'^$', views.flatpage, {'url': '/home/'}, name='home')
]

我可以毫无问题地加载页面,然后当我提交表单以切换语言时,我收到 CSRF 错误。

编辑

我必须补充一点,当我处于 root 状态时,该表单运行良好。

最佳答案

我最终通过在我的 View 中使用不同的渲染函数解决了这个问题:

  return render(req, 'art.html', {'highlight': highlight, 'exhibitions': exhibitions})

关于internationalization - Django1.10 -/i18n/setlang/CSRF token 丢失或不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41959261/

相关文章:

ios - 在 NSUserDefaults 上更改语言后更新 UI

ruby-on-rails - 错误 I18n::InvalidLocaleData

node.js - 在 Express 中使用 csurf 和 session

java - 如何在 SAST Checkmarx 之后解决 API Controller 中的 XSRF 跨站请求伪造 (CSRF)

python - Django ModelForm 不保存在数据库上创建帖子的用户

django - 异常值 : column home_profile. 目标不存在

ruby-on-rails - 您如何知道 YAML 文件在哪里损坏?

python - 如何创建国际化的 Google App Engine 应用程序

security - CSRF 是否可以通过 PUT 或 DELETE 方法实现?

django - 使用 GeoDjango 将 geojson 文件中的多边形数据导入 PostGIS