django ссылка на другую страницу отображает новую страницу - PullRequest
0 голосов
/ 02 февраля 2020

Что я пытаюсь сделать:

Я хочу щелкнуть ссылку на своей странице, а затем перейти на другую из моих страниц.

login. html:

{% block body %}
<h1>Login</h1>
{% if message %}
<div>
    {{ message }}
</div>
{% endif %}
<form action="{% url 'login' %}" method="post">
    {% csrf_token %}
    <input name="username" type="text" />
    <input name="password" type="password" />
    <input type="submit" value="Login" />
</form>
<a class="btn btn-primary" href="{% url 'new_user' %}">New user</a>
{% endblock %}

new_user. html:

{% block body %}
<h1>New user</h1>
{% if message %}
<div>
    {{ message }}
</div>
{% endif %}
<form action="{% url 'new_user' %}" method="post">
    {% csrf_token %}
    <input name="username" type="text" />
    <input name="password" type="password" />
    <input name="email" type="email" />
    <input type="submit" value="Login" />
</form>
{% endblock %}

urls.py в основном приложении:

urlpatterns = [
    path("", include("orders.urls")),
    path("new_user/", include("users.urls")),
    path("login/", include("users.urls")),
    path("admin/", admin.site.urls),
]

urls.py у пользователей:


urlpatterns = [
    path("", views.index, name="index"),
    path("login", views.login_view, name="login"),
    path("logout", views.logout_view, name="logout"),
    path("new_user", views.new_user_view, name="new_user")
]

views.py:

def index(request):
    if not request.user.is_authenticated:
        return render(request, "users/login.html", {"message": None})
    context = {
        "user": request.user
    }
    return render(request, "users/user.html", context)


def login_view(request):
    username = request.POST["username"]
    password = request.POST["password"]
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        return HttpResponseRedirect(reverse("index"))
    else:
        return render(request, "users/login.html", {"message": "Invalid credentials."})


def new_user_view(request):
    username = request.POST["username"]
    password = request.POST["password"]
    user = User.objects.create_user(username=username, password=password)
    if user is not None:
        user.save()
        login(request, user)
        return HttpResponseRedirect(reverse("index"))
    else:
        return render(request, "users/new_user.html", {"message": "Invalid credentials."})

Поведение: Что происходит, если я go на localhost:8000/login нажимаю ссылку для нового пользователя, мой браузер перенаправляет меня на localhost:8000/new_user, но все еще отображает логин. html, а не new_user. html

Чего мне не хватает?

1 Ответ

2 голосов
/ 02 февраля 2020

Измените

urlpatterns = [
    path("", include("orders.urls")),
    path("new_user/", include("users.urls")),
    path("login/", include("users.urls")),
    path("admin/", admin.site.urls),
]

на

urlpatterns = [
    path("", include("orders.urls")),
    path("", include("users.urls")),
    path("admin/", admin.site.urls),
]

Будут включены все URL-адреса от users.

path("new_user/", include("users.urls")) приведет к дополнительному префиксу new_user для всех URL из users. В этом случае localhost:8000/new_user соответствует странице index из приложения users. Вы можете попробовать получить доступ к localhost:8000/new_user/new_user с текущей конфигурацией - он отобразит ожидаемую страницу.

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