मैं कुछ चैट वेबसाइट बनाना सीख रहा हूं, और मैं यूआरएल का सही तरीके से उपयोग करने का तरीका नहीं समझ सकता। समस्या यह है कि जब मैं "http://127.0.0.1:8000/chat" पर जाता हूं, तो हेडर में लिंक "http:// के बजाय" http://127.0.0.1:8000/chat/main "की तरह बन जाते हैं। 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
    })

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>

Chatindex.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')" के बारे में है, लेकिन मुझे समझ नहीं आ रहा है कि इसे कैसे ठीक किया जाए और चैट-पेज के साथ कमरे में प्रवेश करने का अवसर बचाया जाए। बहुत - बहुत धन्यवाद!

1
GeorgeGray 24 पद 2020, 04:27
क्या आप दिखा सकते हैं कि आप अपने लिंक कैसे रेंडर करते हैं। सापेक्ष पथ बनाने से बचने के लिए आपको इसे स्लैश के साथ प्रस्तुत करना होगा।
 – 
Willem Van Onsem
24 पद 2020, 04:30
मैंने पोस्ट संपादित किया है, अगर मैं आपको सही समझा।
 – 
GeorgeGray
24 पद 2020, 04:34

1 उत्तर

सबसे बढ़िया उत्तर

बहुत संभव है कि आप सापेक्ष पथ बनाते हैं। वास्तव में, यदि आप some.domain.com/foo जैसे किसी पृष्ठ पर जाते हैं, और लिंक <a href="bar">link</a> है, तो यह some.domain.com/foo/bar पर जाएगा, क्योंकि यह एक सापेक्ष पथ है: के सापेक्ष वर्तमान पथ।

आप इसे एक निरपेक्ष पथ निर्दिष्ट करके हल कर सकते हैं, जिसमें एक अग्रणी स्लैश है, इसलिए:

<!--     &downarrow; 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]:

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

Django तब दिए गए नाम के साथ एक दृश्य की तलाश करेगा, और स्वचालित रूप से संबंधित URL उत्पन्न करेगा।

1
Willem Van Onsem 24 पद 2020, 04:38
1
दो तरीकों से उत्तर देने के लिए बहुत-बहुत धन्यवाद: html और Django तरीके!
 – 
GeorgeGray
24 पद 2020, 04:42