Проблема с конфигурацией 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})
Вернуться на верх