Ref 在我的设置中无法正常工作



我正在学习制作一些聊天网站,但我不太了解如何正确使用url。问题是,当我达到";http://127.0.0.1:8000/chat",进入报头的链接变得像";http://127.0.0.1:8000/chat/main"而不是";http://127.0.0.1:8000/main">

项目urls:

from django.contrib import admin
from django.urls import path
from django.urls import include, path
from chat import views as chat_views
from mainapp import views as mainapp_views
urlpatterns = [
path('admin/', admin.site.urls),
path('', mainapp_views.index),
path('chat/', include('chat.urls')),
]

聊天应用程序网址:

from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('<str:room_name>/', views.room, name='room'),
]

聊天应用程序视图:

from django.shortcuts import render
def index(request):
return render(request, 'chat/chatindex.html')
def room(request, room_name):
return render(request, 'chat/room.html', {
'room_name': room_name
})

index.html

<!DOCTYPE html>
{% load static %}
<html>
<head>
<meta charset="utf-8"/>
<link rel="stylesheet" href="{% static 'css/bootstrap.css' %}"/>
<title>{% block title %}{% endblock title %}</title>
</head>
<body>
<header>
<div class="navbar navbar-dark bg-dark shadow-sm">
<a href="" class="navbar-brand d-flex align-items-center">Главная</a>
<a href="searching" class="navbar-brand d-flex align-items-center">Поиск собеседников</a>
<a href="contacts" class="navbar-brand d-flex align-items-center">Контакты</a>
<a href="faq" class="navbar-brand d-flex align-items-center">FAQ</a>
<a href="login" class="navbar-brand d-flex align-items-center">Регистрация/Вход</a>
</div>
</div>
</header>
<main>
<div>{% block content%}{% endblock content %}</div>
</main>
<footer class="footer mt-auto py-3 bg-light">
<div class="container">
<span class="text-muted">Давай общаться!</span>
</div>
</footer>
</body>
</html>

聊天index.html

{% extends "index.html" %}
{% block title %}Контакты{% endblock title %}
{% block header %}{% endblock header %}
{% block content %}
В какую комнату хотите зайти?
<br>
<input id="room-name-input" type="text" size="100">
<br>
<input id="room-name-submit" type="button" value="Enter">
<script>
document.querySelector('#room-name-input').focus();
document.querySelector('#room-name-input').onkeyup = function(e) {
if (e.keyCode === 13) {  // enter, return
document.querySelector('#room-name-submit').click();
}
};
document.querySelector('#room-name-submit').onclick = function(e) {
var roomName = document.querySelector('#room-name-input').value;
window.location.pathname = '/chat/' + roomName + '/';
};

</script>
{% endblock content%}   

我确信问题出在";CCD_ 1";,但我不明白如何修复它,并节省进入聊天页面房间的机会。非常感谢!

很可能会生成相对路径。事实上,如果您访问像some.domain.com/foo这样的页面,并且链接是<a href="bar">link</a>,那么它将访问some.domain.com/foo/bar,因为这是一个相对路径:相对于当前路径。

您可以通过指定一个具有前导斜杠的绝对路径来解决此问题,因此:

<!--     ↓ leading slash -->
<a href="/faq" class="navbar-brand d-flex align-items-center">FAQ</a>

但是手动生成URL最好是而不是。例如,如果以后更改URL路径,则需要更改所有URL。你可以给你的观点起个名字,比如:

path('faq', views.faq, name='faq')

并且在模板中使用{% url … %}模板标签[Django-doc]:

<!--     ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ url template tag -->
<a href="{% url 'faq' %}" class="navbar-brand d-flex align-items-center">FAQ</a>

Django将查找具有给定名称的视图,并自动生成相应的URL。

最新更新