html - Django URL 显示上一个和当前页面,但我只想要 URL 中的当前页面名称
问题描述
假设目前我在“http://127.0.0.1:8000/message/detailmessage/5”页面上,我想通过单击 base.html(导航栏)中的登录超链接进入“登录”页面,我希望它显示“http://127.0.0.1:8000/login”,但它显示“http://127.0.0.1:8000/message/detailmessage/login”我该怎么办?
base.html
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
<!-- Bootstrap CSS -->
<link
rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
crossorigin="anonymous"
/>
<style>
{% block css %}{% endblock %}
</style>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Home</a>
<button
class="navbar-toggler"
type="button"
data-toggle="collapse"
data-target="#navbarNavDropdown"
aria-controls="navbarNavDropdown"
aria-expanded="false"
aria-label="Toggle navigation"
>
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavDropdown">
{% for id in doctor %}
{{id.doctor_id}}
{% endfor %}
<ul class="navbar-nav ml-auto">
{% for id in doctor %}
{{id.doctor_id}}
<li class="nav-item">
<a class="nav-link" href=message/{{id.doctor_id}}>Message</a>
</li>
{% endfor %}
<li class="nav-item dropdown">
<a
class="nav-link dropdown-toggle"
href="#"
id="navbarDropdownMenuLink"
data-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false"
>
LogIn/LogOut
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" href="login">Login</a>
<a class="dropdown-item" href="/">Log Out</a>
</div>
</li>
</ul>
</div>
</nav>
{% block body %} {% endblock %}
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script
src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
crossorigin="anonymous"
></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
crossorigin="anonymous"
></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
crossorigin="anonymous"
></script>
</body>
</html>
消息.html
{% extends 'base.html' %}
{% block css %}
{% endblock %}
{%block body %}
<h1>My Message Page</h1>
<table class="table table-hover">
<thead>
<tr>
<th scope="col">No</th>
<th scope="col">Sender</th>
<th scope="col">Message</th>
<th scope="col">Action</th>
</tr>
</thead>
<tbody>
{% for message in message %}
<tr>
<th scope="row">{{ forloop.counter }}</th>
<td> {{message.sender}}</td>
<td>{{message.message_text}}</td>
<td><a href="detailmessage/{{message.messager_id}}">View</td>
</tr>
{% endfor %}
</tbody>
</table>
{% load static %}
{% endblock %}
详细信息.html
{% extends 'base.html' %}
{% block css %} body {
overflow-y:hidden;
}{% endblock %}
{%block body %}
<div class="container my-4 d-flex h-100">
<div class="row align-self-center w-100">
<div class="col-6 mx-auto">
<div class="jumbotron">
{% for message in message %}
<h1 class="display-4">Title:{{message.message_title}}</h1>
<p class="lead">Send By:{{message.sender}}</p>
<p class="lead">{{message.message_text}}</p>
<footer class="blockquote-footer">{{message.send_message}}</footer>
<p class="lead">
<button type="button" onclick="goBack()" class="btn btn-info my-4">
Back
</button>
</p>
{% endfor %}
</div>
</div>
</div>
</div>
<script>
function goBack() {
window.history.back();
}
</script>
{% load static %}
{% endblock %}
视图.py
from django.shortcuts import render, redirect, HttpResponse
from django.contrib.auth import authenticate, login, logout
from django.contrib import messages
from .models import Doctor, Message
# Create your views here.
def home(request):
return render(request, 'home.html')
def login(request):
print("before login is done")
if request.method=="POST":
# Get the post parameters
username=request.POST['username']
password=request.POST['password']
print(username)
if Doctor.objects.filter(username=username).exists():
print("after username filter")
print(username)
if Doctor.objects.filter(password=password).exists():
# messages.success(request, "Successfully Logged In")
print("login is done")
doctorid=Doctor.objects.filter(username=username)
cnt = {'doctor': doctorid}
return render(request,'home.html', cnt)
else:
messages.error(request, "Invalid credentials! Please try again")
print("login is wrong")
return redirect("/login")
else:
messages.error(request, "Invalid credentials! Please try again")
print("login is wrong")
return redirect("/login")
return render(request,"login.html")
def message(request, id):
print("messages are in this vieews")
print(id)
message = Message.objects.filter(receiver=id)
cnt = {'message': message}
print(message)
return render(request, 'message.html', cnt)
def detailmessage(request, id):
message = Message.objects.filter(messager_id=id)
print(message)
cnt = {'message': message}
return render(request, 'detailmessage.html', cnt)
网址.py
from django.urls import path
from . import views
app_name = 'msg'
urlpatterns = [
path('home', views.home, name='home'),
path('message/<int:id>', views.message, name='message'),
path('message/detailmessage/<int:id>', views.detailmessage, name='detailmessage'),
path('login', views.login, name='login'),
]
解决方案
在您的模板上,使用 this<a class="dropdown-item" href="{% url 'login' %}">Login</a>
而不是 this :<a class="dropdown-item" href="login">Login</a>
检查https://docs.djangoproject.com/en/3.1/ref/templates/builtins/#url
推荐阅读
- socket.io - Socket IO 默认房间
- java - 嵌套异常为 com.microsoft.sqlserver.jdbc.SQLServerException: 输出参数的索引 0 无效
- vba - VBA 宏中的运行时错误
- c - 控制可能到达非空函数的末尾。频率
- javascript - 基于年份的Angular Js表格格式
- gitlab - 在同一个存储库中嵌套管道
- python - 基于相关矩阵的csv文件重新排序
- c++ - 如何在 Linux 运行时检查堆栈使用情况?
- flutter - Flutter_Console 每个命令只是冻结并且不返回任何内容
- javascript - 这段 Javascript 代码中的“This”指的是什么?