Интеграция Django_hosts создает 'NoReverseMatch в / en / api /' при попытке доступа к api - PullRequest
1 голос
/ 31 мая 2019

Я в процессе интеграции Django_hosts.У меня есть внешние URL-адреса и URL-адреса администратора, успешно интегрированные и работающие, но мои URL-адреса REST API по-прежнему недоступны из-за этой ошибки:

'NoReverseMatch at /en/api/'

Ошибка прослеживается до Django / urls / base.py,но я не уверен, что это вызывает:

Traceback (most recent call last):
  File "/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/lib/python3.6/site-packages/django/core/handlers/base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/lib/python3.6/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view
    resolved_login_url = resolve_url(login_url or settings.LOGIN_URL)
  File "/lib/python3.6/site-packages/django/shortcuts.py", line 148, in resolve_url
    return reverse(to, args=args, kwargs=kwargs)
  File "/lib/python3.6/site-packages/django/urls/base.py", line 86, in reverse
    raise NoReverseMatch("%s is not a registered namespace" % key)
django.urls.exceptions.NoReverseMatch: 'admin' is not a registered namespace

Это мои файлы hosts.py и api_urls.py:

# hosts.py
host_patterns = patterns(
    '',
    host(r'www', settings.ROOT_URLCONF, name='www'),
    host(r'admin', 'Project.admin_urls', name='admin'),
    host(r'api', 'Project.api_urls', name='api'),
)

# api_urls.py
urlpatterns += i18n_patterns (
           path('session_security/', include('session_security.urls')),
           path('', include('Project.apps.api.urls'), name='api'),
           ) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Кроме того, чтобы убить двух зайцев одним выстреломпри попытке преобразовать этот URL:

{% url 'profile' request.user.id %}

в этот URL:

{% host_url 'profile' host 'www' request.user.id %}

Не удается выдать ошибку NoReverseMatch без аргументов, как если бы аргументы игнорировались.

Любая помощь от кого-то знающего об этом пакете или любой из этих проблем будет оценена.

Спасибо.

Обновление

Я решил этоошибка при включении URL-адресов admin.site в файл api_urls.py:

# api_urls.py
urlpatterns += i18n_patterns (
           path('session_security/', include('session_security.urls')),
           path('', include('Project.apps.api.urls'), name='api'),
           ) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
           path('', admin.site.urls, name='admin'), <--This is key, but not sure exactly why.

Однако теперь я столкнулся с чем-то странным, что не является ошибкой, но эффективно действует как один для моего использования.дело.Похоже, что API больше не распознает request.user, поэтому даже если пользователь вошел в систему, API считает, что он является AnonymousUser.

* Субдомены API и Admin не распознают вошедшего в систему пользователя.Кажется, что-то связано с SESSION cookie ...

...