簡體   English   中英

Ref 不適用於我的設置

[英]Ref doesn't work correctly with my settings

我正在學習制作一些聊天網站,但我不太了解如何正確使用網址。 問題是當我到達“http://127.0.0.1:8000/chat”時,指向 header 的鏈接變成了“http://127.0.0.1:8000/chat/main”而不是“http:// 127.0.0.1:8000/主"

項目網址:

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
    })

索引.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>

聊天索引.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%}   

我很確定問題與“ path('<str:room_name>/', views.room, name='room') ”有關,但我不明白如何解決它並節省進入房間的機會與聊天頁面。 非常感謝!

很可能您會創建相對路徑。 實際上,如果您訪問類似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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM