Переменные настроек django теряются при передаче в шаблоны - PullRequest
3 голосов
/ 12 октября 2011

У меня странная проблема.По сути, в моем файле settings.py у меня есть 4 переменные

URL_MAIN = 'http://www.mysite'
URL_JOBS = 'http://jobs.mysite'
URL_CARS = 'http://cars.mysite'
URL_HOMES = 'http://homes.mysite'

В моем views.py у меня есть обычные:

from settings import *

У меня есть 6 представлений, вызывающих их и просто возвращающихдля шаблонов внутри контекста:

class CarsHp(TemplateView):
     ...

class JobsHp(TemplateView):
     ...

class HomesHp(TemplateView):
     ...

class CarsList(TemplateView):
     ...

class JobsList(TemplateView):
     ...

class HomesList(TemplateView):
     ...

, которые вызываются в URL-адресах

CarsList.as_view()
...

Все эти представления имеют одно и то же выражение:

context['URL_MAIN'] = URL_MAIN
...

длявсе 4 переменные.

В шаблонах я правильно получаю все 4 из них, кроме URL_MAIN, который "теряется" в 2 из этих 6 представлений.Я получаю к ним доступ с помощью классического {{URL_MAIN}} и пробую все, от перехода к переименованию, но все же этот URL_MAIN не отображается (я получаю пустую строку, без ошибок сортировки) после обслуживания из 2из этих взглядов.Все функции в основном используют один и тот же код (за исключением части запросов и обработки данных), а переменные этих настроек просто присваиваются и возвращаются.Не какой-либо проверки или модификации.Я пытался использовать оболочку django, и я всегда мог получить их.

Мы обслуживаемся apache, с некоторыми конфигурациями прокси-сервера для файла robots.txt и статических файлов.Ничего "серьезного".

Я не публикую все исходные коды 6 представлений только потому, что они длинные и соответствующие части описаны выше.Но я могу опубликовать их, если хотите, я просто не знаю, действительно ли это полезно, так как я трижды проверял все источники на предмет столкновения имен, двойных объявлений или неправильного использования.

Спасибо всем зазаранее, это действительно ошеломляет мой мозг

1 Ответ

5 голосов
/ 12 октября 2011

В идеале, вы должны использовать шаблонные контекстные процессоры для этого.Это сократит ваш код и позволит вам точно определить, в чем проблема.

Создайте в своих проектах файл с именем urls_context_processor.py (или аналогичным) и поместите туда свои переменные:

def common_urls(request):
    return {
        'URL_MAIN': "http://...",
        'URL_JOBS': "http://...",
        'URL_CARS': "http://...",
        'URL_HOME': "http://...",
    }

и в settings.py

TEMPLATE_CONTEXT_PROCESSORS = = (
      ....
      'my_project.urls_context_processor.common_urls',)

теперь переменные urls будут автоматически доступны во всех ваших шаблонах, и вам не нужно будет жестко их кодировать в каждом представлении.

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