Проблема с конфигурацией FORCE_SCRIPT_NAME в Django
Мне приходится использовать FORCE_SCRIPT_NAME для установки имени приложения. Проблема в том, что при переходе с одной страницы на другую имя скрипта устанавливается за url. Ниже приведен код
#setting.py
FORCE_SCRIPT_NAME = "/myapp/"
#urls.py(myapp)
urlpatterns = [
path('', views.index, name='index'),
path('another-page/', views.another_page, name='another_page'),
]
#urls.py(project
urlpatterns = [
path("admin/", admin.site.urls),
path('myapp/', include('myapp.urls')),
]
#views.py
def index(request):
return render(request, 'home.html')
def another_page(request):
return render(request, 'another_page.html')
В результате, когда я перехожу с домашней страницы на другую_страницу, url выглядит так: http://127.0.0.1:8000/myapp/myapp/another-page/
Как это исправить?
Это код для главной страницы
<body>
<h1>Welcome to the Home Page!</h1>
<a href="{% url 'another_page' %}">
<button type="button">Go to Another Page</button>
</a>
</body>
Попробуйте заменить {% url 'another_page' %}
на {{ request.script_name }}another-page/
непосредственно в шаблоне или создайте собственный тег шаблона:
from django import template
from django.urls import reverse
from django.conf import settings
register = template.Library()
@register.simple_tag
def url_with_prefix(view_name, *args, **kwargs):
return settings.FORCE_SCRIPT_NAME + reverse(view_name, args=args, kwargs=kwargs)
В вашем шаблоне:
{% load custom_tags %}
<a href="{% url_with_prefix 'another_page' %}">
<button type="button">Go to Another Page</button>
</a>
Также вы можете передать URL в контексте представления:
from django.urls import reverse
def index(request):
another_page_url = request.script_name + reverse('another_page')
return render(request, 'home.html', {'another_page_url': another_page_url})