запрос отсутствует из контекста - PullRequest
3 голосов
/ 20 июля 2011

Я пытаюсь использовать django-localeurl в одном из моих проектов, но, следуя документам, я просто получаю сообщение об ошибке. Что я хочу, так это заставить работать этот код в шаблоне:

    {% load i18n %}
    {% load localeurl_tags %}
    {% get_available_languages as LANGUAGES %}
    {% get_current_language as LANGUAGE_CODE %}

    {% for lang in LANGUAGES %}
      {% ifequal lang.0 LANGUAGE_CODE %}
      <li class="selected">{{ lang.1 }}</li>
      {% else %}
      <li><a href="{{ request.path|chlocale:lang.0 }}">{{ lang.1 }}</a></li>
      {% endifequal %}
    {% endfor %}

это от: http://packages.python.org/django-localeurl/usage.html

Я получил эту ошибку

    Caught AssertionError while rendering: URL must start with SCRIPT_PREFIX: 

Проблема в этой строке:

    <li><a href="{{ request.path|chlocale:lang.0 }}">{{ lang.1 }}</a></li>

request.path - пустая строка. но почему? в браузере я вижу 127.0.0.1/hu/, поэтому, если я прав, он должен содержать /hu/.

Для простоты я создал новый проект только с django 1.3 и django-localeurl в виртуальной среде.

Мой файл settings.py выглядит следующим образом (важные части, которые я знаю):

LANGUAGES = (
  ('hu', 'Hungarian'),
  ('en', 'English'),
  ('sk', 'Slovakian'),
)

LANGUAGE_CODE = 'hu'

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'localeurl.middleware.LocaleURLMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

TEMPLATE_CONTEXT_PROCESSORS = (
  "django.contrib.auth.context_processors.auth",
  "django.core.context_processors.debug",
  "django.core.context_processors.request",
  "django.core.context_processors.i18n",
  "django.core.context_processors.media",
  "django.core.context_processors.static",
  "django.contrib.messages.context_processors.messages",
)
INSTALLED_APPS = (
    'localeurl',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)

Чего мне не хватает?

Редактировать 1: Я могу поставить request.path manually в контекст:

def main(request):  
  return render_to_response( 'base.html', {'rpath': request.path})

чем я использую rpath в шаблоне вместо request.path, но, но .... request.path должен содержать что-то, потому что django.core.context_processors.request в TEMPLATE_CONTEXT_PROCESSORS.

Ответы [ 3 ]

3 голосов
/ 24 июля 2011

Проблема не была связана с localeurl, со следующими работами вида:

return render_to_response( 'base.html', {}, context_instance = RequestContext(request))

Я думал, что добавление django.core.context_processors.request в TEMPLATE_CONTEXT_PROCESSORS сделает работу, но не.

0 голосов
/ 01 ноября 2011

По вашему мнению, при возврате ответа укажите context_instance следующим образом:

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

return render_to_response('base.html',{'object':object},context_instance=RequestContext(request))
0 голосов
/ 20 июля 2011

Промежуточное программное обеспечение URL-адреса локализации взломает request.path Я думаю, что вы ищете, request.path_info

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...