मैं कुछ चैट वेबसाइट बनाना सीख रहा हूं, और मैं यूआरएल का सही तरीके से उपयोग करने का तरीका नहीं समझ सकता। समस्या यह है कि जब मैं "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 उत्तर
बहुत संभव है कि आप सापेक्ष पथ बनाते हैं। वास्तव में, यदि आप 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 उत्पन्न करेगा।
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।