Как я устанавливаю urlpatterns на основе доменного имени или TLD в Django?

Использование np.where дважды

np.where(sd[0]==0,0,np.where(dd.eq(0).all(1),'OK',dd.mask(dd==0).mean(1)))
Out[232]: 
array(['0', '0.3333333333333333', '-0.3333333333333333', '0.5', '0.65',
       'OK', '0'], dtype='<U32')
6
задан Martijn Pieters 22 April 2014 в 14:49
поделиться

3 ответа

Необходимо сделать это на уровне веб-сервера (например, использующий mod_rewrite в Apache) или с промежуточным программным обеспечением (например, этот отрывок)

Также посмотрите это ТАК вопрос


Обновление: после Вашего комментария я думал об этом еще немного. Я любил ответ Carl Meyer, но затем понял, что он не обработает {% URL %} инвертирующий правильно. Таким образом, вот то, что я сделал бы:

Несколько сайтов: необходимо использовать платформу сайтов Django. Что означает делать экземпляры сайта для каждого языка с помощью администратора Django.

Несколько настроек: Каждый сайт языка будет также иметь свой собственный settings.py. Единственные различия между каждым сайтом будут SITE_ID и ROOT_URLCONF настройки так, для следования за принципом DRY необходимо сохранить общие настройки в другом файле и импортировать их в основной файл как это:

# settings_fr.py
SITE_ID = 1
ROOT_URLCONF = 'app.urls_fr'
from settings_common import *

# settings_de.py
SITE_ID = 2
ROOT_URLCONF = 'app.urls_de'
from settings_common import *

... и так далее.

Несколько URL conf: Как подразумевается выше, URL conf для каждого сайта:

# urls_fr.py
urlpatterns = patterns('',
    url(r'^Livres/$', books_view, name="books"),
)

# urls_de.py
urlpatterns = patterns('',
    url(r'^Bücher/$', books_view, name="books"),
)

... и так далее.

Таким образом, имя URL (в этом примере "книги") является тем же для всех языков, и поэтому {% url books %} инвертирует правильно, и доменное имя будет domain_name полем объекта Сайта с SITE_ID.

Несколько экземпляров веб-сервера: Для каждого САЙТА для работы правильно каждому из них нужны их собственные экземпляры сервера. Для апача + mod_wsgi это означает другое wsgi приложение для каждого САЙТА как это:

# site_fr.wsgi
import os, sys, django.core.handlers.wsgi
os.environ['DJANGO_SETTINGS_MODULE'] = 'app.settings_fr'
application = django.core.handlers.wsgi.WSGIHandler()

... и так далее наряду с соответствием апачскому виртуальному хосту к каждому сайту:

<VirtualHost *:80>
    ServerName mybooks.fr
    WSGIScriptAlias / /path/to/site_fr.wsgi
    ...
</VirtualHost>

Надо надеяться, это ясно :)

12
ответ дан 8 December 2019 в 13:02
поделиться

В django существует таблица под названием "Сайты". Возможно, можно ли сделать что-то с этим?

-2
ответ дан 8 December 2019 в 13:02
поделиться

Можно, вероятно, сделать это с промежуточным программным обеспечением, которое получает TLD через запрос. META ['HTTP_HOST'] и предварительно ожидает его к request.path; затем Ваш корневой URLconf может выключить к определенному для языка URLconfs на основе TLD как первый сегмент контура URL. Что-то вроде этого (непротестированный!):

class PrependTLDMiddleware:
""" Prepend the top level domain to the URL path so it can be switched on in 
a URLconf. """

def process_request(self, request):
    tld = request.META['HTTP_HOST'].split('.')[-1]
    request.path = "/%s%s" % (tld, request.path)

И в Вашем URLconf:

urlpatterns = patterns('',
    url(r'^de/' include('de_urls')),
    url(r'^fr/', include('fr_urls')),
    url(r'^[^/]+/', include('en_urls'))
)

И затем de_urls.py, fr_urls.py, и en_urls.py мог каждый иметь все URL, в которых Вы нуждаетесь на соответствующем языке.

8
ответ дан 8 December 2019 в 13:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: