Привязка приложения к root вместо реального приложения при перенаправлении - PullRequest
0 голосов
/ 07 апреля 2020

У меня возникли проблемы при работе с путями в Django. У меня есть python опыт, но не Django опыт вообще.

Вот что у меня есть

templates/AppName/base.html

<header id="header">
    <div id="logo">
    <div id="top_menu">
        Home | Calendar | About |
    <a href="/contactus">Contact Us</a>
    </div>
    </div>
</header>

template/AppName/contact_us.html

{% extends 'Orchestrator/base.html' %}

{% block content %}
    <h2>New post</h2>
    <form method="POST" class="post-form">{% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="save btn btn-default">Save</button>
    </form>
{% endblock %}

AppName/urls.py

from django.urls import path

from . import views

app_name = 'AppName'
urlpatterns = [
    path('', views.index, name='index'),
    path('contactus/', views.contact_us, name='contactus')
]

AppName/views.py

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render

from .forms import ContactUs


def index(request):
    return render(request, 'AppName/base.html')


# Forms #
def contact_us(request):
    form = ContactUs()
    return render(request, 'AppName/contact_us.html', {'form': form})

AppName/forms.py

from django import forms

class ContactUs(forms.Form):
    firstname = forms.CharField(max_length=100)
    lastname = forms.CharField(max_length=100)

urls.py (Root один )

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('AppName/', include('AppName.urls')),
    path('admin/', admin.site.urls),
]

Итак, рендеринг начальной страницы, то есть 127.0.0.1:8000/AppName работает просто отлично, но когда я хочу, чтобы кнопка Contact Us перенаправила на AppName/contactus, Django фактически перенаправляет в 127.0.0.1/contactus.

Есть идеи, как решить эту проблему?

РЕДАКТИРОВАТЬ: Добавлено root/urls.py

1 Ответ

0 голосов
/ 07 апреля 2020

Ну, получается, что проблема присутствовала в base.html.

Вместо /contactus это должно быть contactus/

Использование contactus/ фактически перенаправляет на 127.0.0.1/AppName/contactus

РЕДАКТИРОВАТЬ: Из дальнейших ответов, лучший способ справиться с этим на самом деле с использованием

{% url "contactus" %}

Таким образом, пути не жестко закодированы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...