1. Yurich

    29.08.2008 14:19

    Здравствуйте,
    Хотел бы спросить вот такую весчь.
    Я делаю сайт у которого есть множество поддоменов. И содержимое сайта (статьи) должны показываться в зависимости от домена. Т.е. в nginx у меня сказано - server { listen ip:80; } и все что приходит на соответствующий ip сервера по 80 порту обрабатывается одним проектом джанги. Ну и в днс-е прописано *.domain.ru смотрит на этот ip. На сколько я понял django.contrib.sites мне ни как не поможет ибо SITE_ID указывается в конфигах, а мне его нада определять на лету.

    1. Как мне реализовать чтоб в углу каждого сайтека был написан домен и тематика сайта?

    Сейчас я во вьюшках определяю домен через request.get_host() и в зависимости от него отдаю статьи. Отдавать в каждой вьюшке название домена и тематику, в каждом темплейте определять блок этих данных... имхо не есть django style. Хотелось бы где-то определить эти две переменные и чтоб они в пределах всего сайта в темлейтах были видны. Сделать свой таг? тоже не вариант - как я в нем узнаю домен?

    2. Как реализовывать sitemap.xml ? как ему сказать домен?
    1. Сделайте middleware и в нем к запросу цепляйте атрибут домена в той или иной форме. Через thread locals можно также сохранять информацию о текущем домене и на её основе в кастомных менеджерах моделей осуществлять автоматическую фильтрацию сущностей.

    2. django.contrib.sitemaps поможет в создании sitemap.xml

  2. Yurich

    29.08.2008 14:51

    Александр, спасибо.
    Вот всеже не в первый раз убеждаюсь - когда ясно изложишь что тебе нужно и пару раз перечитаешь сам свое написанное - ответ почти всегда приходит сам :) про мидлваре я уже докумекал только что сам, перечитав http://cargo.caml.ru/djangobook/ch03s03.html еще раз, а вот с сайтмапом пока нет.

    сейчас вот как я генерю сайт-мап:
    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})
    )
    но блин как мне ему подсунуть текущий домен? т.е. из первой строчки видно, что я все показываю для одного домена test.domain.ru. как мне туда подсунуть нечто вроде request.get_host() ???
  3. Yurich

    29.08.2008 15:01

    да, еще кстати с удивлением (до чего же я ламер, аж стыдно) узнал про TEMPLATE_CONTEXT_PROCESSORS и про то что по дефаулту там есть django.core.context_processors.request и это значит, что во всех темлейтах будет доступен request.get_host и следовательно, теперь можно написать свой таг, которому подсовывать этот request.get_host и он будет возвращать тематику.

    Кстати мне еще не совсем понятно как сделать так чтоб в шаблоне base.html было прописано {{ request.get_host }} а при рендинге скажем article.html следующего содержания:
    {% extends "base.html" %}
    {% block main %}
    бла-бла
    {% endblock %}
    в base.html таки показывалось содержимое request.get_host ?
    или все таки в base.html нада сделать {% block domain %}{{ request.get_host }}{% endblock %} и в каждом шаблоне тоже самое???? блин как то не правильно я мыслю... должно быть более правильное решение ...
  4. как мне туда подсунуть нечто вроде request.get_host() ???

    Придется чуть-чуть адаптировать django.contrib.sitemaps.views.sitemap. Т.е. взять там код и заточить под себя

    в base.html таки показывалось содержимое request.get_host ?

    Оно и так будет выводиться. В каждом шаблоне-наследнике этого делать не нужно.

  5. Yurich

    29.08.2008 16:19

    Александр, спасибо с первым я понял, а вот со вторым долго мучился и помог Ваш совет - http://python.com.ua/forum/viewtopic.php?pid=7530#p7530

    большое Вам спасибо.
  6. slav0nic

    03.09.2008 02:54

    есть ещё такая штука, сам не юзал и возможно не совсем то) http://code.google.com/p/django-accounts/

bbcode