Перекрестный сайт Django инвертирует URL

Можно также использовать структура модуль, чтобы сделать это:

>>> struct.unpack("

8
задан drdaeman 4 August 2009 в 06:58
поделиться

3 ответа

Я реализовал это, переопределив django.core.urlresolvers.reverse моей пользовательской функцией:

from django.core import urlresolvers
from django.conf import settings

__real_reverse = urlresolvers.reverse

def reverse(viewname, urlconf=None, args=None, kwargs=None, prefix=None):
    try:
        return __real_reverse(viewname, urlconf, args, kwargs, prefix)
    except urlresolvers.NoReverseMatch, no_match:
        external_urlconfs = getattr(settings, 'EXTERNAL_URLCONFS', [])
        for p, c in external_urlconfs:
            c = urlresolvers.RegexURLResolver(r'^/', c)
            try:
                return p + c.reverse(viewname, *args, **kwargs)
            except urlresolvers.NoReverseMatch:
                pass
        raise no_match

urlresolvers.reverse = reverse

Затем перечислив URLconfs в settings.py вот так:

ROOT_URLCONF = 'project.urls_a'

EXTERNAL_URLCONFS = (
    ('http://b.example.com/', 'project.urls_b'),
)
12
ответ дан 5 December 2019 в 10:43
поделиться

Да, вам нужно будет создать свой собственный тег {% url%} , который использует собственный метод разворота.

Например, для реверсирования специально для site_a urlconf, тогда вы можете использовать такой метод:

from django.core.urlresolvers import reverse
import site_a

def site_a_reverse(viewname, args=None, kwargs=None):
    # If your sites share the same database, you could get prefix from Site.objects.get(pk=site_a.settings.SITE_ID)
    prefix = 'http://a.example.com/'  # Note, you need the trailing slash
    reverse(viewname, urlconf=site_a.urls, args=args, kwargs=kwargs, prefix=prefix)
2
ответ дан 5 December 2019 в 10:43
поделиться

Я бы предложил внести два изменения. (1) Переместите шаблоны в общий каталог (а не для каждого приложения), если вы еще этого не сделали. (2) Изучите недавно добавленную функцию пространств имен URL .

Первое изменение позволит вам иметь общий базовый шаблон и выборочно переопределять его для различных приложений / сайтов. Второй может сделать ваши URL «суше».

0
ответ дан 5 December 2019 в 10:43
поделиться
Другие вопросы по тегам:

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