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>

message.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 %}

detailmessage.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 %}

views.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)

urls.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'),
]

http://127.0.0.1:8000/message/detailmessage/5pic

http://127.0.0.1:8000/message/detailmessage/loginpic

在您的模板上,使用此<a class="dropdown-item" href="{% url 'login' %}">Login</a>而不是此:<a class="dropdown-item" href="login">Login</a>

检查https://docs.djangoproject.com/en/3.1/ref/templates/builtins/#url

最新更新