-
Здравствуйте,
Хотел бы спросить вот такую весчь.
Я делаю сайт у которого есть множество поддоменов. И содержимое сайта (статьи) должны показываться в зависимости от домена. Т.е. в nginx у меня сказано - server { listen ip:80; } и все что приходит на соответствующий ip сервера по 80 порту обрабатывается одним проектом джанги. Ну и в днс-е прописано *.domain.ru смотрит на этот ip. На сколько я понял django.contrib.sites мне ни как не поможет ибо SITE_ID указывается в конфигах, а мне его нада определять на лету.
1. Как мне реализовать чтоб в углу каждого сайтека был написан домен и тематика сайта?
Сейчас я во вьюшках определяю домен через request.get_host() и в зависимости от него отдаю статьи. Отдавать в каждой вьюшке название домена и тематику, в каждом темплейте определять блок этих данных... имхо не есть django style. Хотелось бы где-то определить эти две переменные и чтоб они в пределах всего сайта в темлейтах были видны. Сделать свой таг? тоже не вариант - как я в нем узнаю домен?
2. Как реализовывать sitemap.xml ? как ему сказать домен? -
Сделайте middleware и в нем к запросу цепляйте атрибут домена в той или иной форме. Через thread locals можно также сохранять информацию о текущем домене и на её основе в кастомных менеджерах моделей осуществлять автоматическую фильтрацию сущностей.
django.contrib.sitemapsпоможет в создании sitemap.xml
-
Александр, спасибо.
Вот всеже не в первый раз убеждаюсь - когда ясно изложишь что тебе нужно и пару раз перечитаешь сам свое написанное - ответ почти всегда приходит сам :) про мидлваре я уже докумекал только что сам, перечитав http://cargo.caml.ru/djangobook/ch03s03.html еще раз, а вот с сайтмапом пока нет.
сейчас вот как я генерю сайт-мап:
но блин как мне ему подсунуть текущий домен? т.е. из первой строчки видно, что я все показываю для одного домена test.domain.ru. как мне туда подсунуть нечто вроде request.get_host() ???domain = Domain.objects.get(domain__iexact='test.domain.ru')
article_dict = {
'queryset': Article.objects.filter(category = domain.category).order_by('-id').all(),
'date_field': 'creation_date',
}
sitemaps = {
'articles': GenericSitemap(article_dict, priority=0.5),
}
urlpatterns += patterns('',
(r'^sitemap.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps})
) -
да, еще кстати с удивлением (до чего же я ламер, аж стыдно) узнал про TEMPLATE_CONTEXT_PROCESSORS и про то что по дефаулту там есть django.core.context_processors.request и это значит, что во всех темлейтах будет доступен request.get_host и следовательно, теперь можно написать свой таг, которому подсовывать этот request.get_host и он будет возвращать тематику.
Кстати мне еще не совсем понятно как сделать так чтоб в шаблоне base.html было прописано {{ request.get_host }} а при рендинге скажем article.html следующего содержания:
в base.html таки показывалось содержимое request.get_host ?{% extends "base.html" %}
{% block main %}
бла-бла
{% endblock %}
или все таки в base.html нада сделать {% block domain %}{{ request.get_host }}{% endblock %} и в каждом шаблоне тоже самое???? блин как то не правильно я мыслю... должно быть более правильное решение ... -
как мне туда подсунуть нечто вроде request.get_host() ???
Придется чуть-чуть адаптировать
django.contrib.sitemaps.views.sitemap. Т.е. взять там код и заточить под себяв base.html таки показывалось содержимое request.get_host ?
Оно и так будет выводиться. В каждом шаблоне-наследнике этого делать не нужно.
-
Александр, спасибо с первым я понял, а вот со вторым долго мучился и помог Ваш совет - http://python.com.ua/forum/viewtopic.php?pid=7530#p7530
большое Вам спасибо. -
есть ещё такая штука, сам не юзал и возможно не совсем то) http://code.google.com/p/django-accounts/

