मेरे दृष्टिकोण में, मेरे पास एक डीफ़ेक्ट इंडेक्स (अनुरोध) है: और अन्य डीफ़ेक्ट (अनुरोध):
डिफ अन्य (अनुरोध) में: मैं डीईई इंडेक्स (अनुरोध) जैसे सटीक कोड चलाना चाहता हूं: यदि request.method == "POST": और कुछ अलग करें
डिफ इंडेक्स (अनुरोध) से कोड कॉपी करें: अन्य (अनुरोध) को अस्वीकार करने के लिए: अगर request.method == "POST" के बाद: काम करता है, लेकिन डुप्लिकेट कोड खराब है। अगर मैं इफ स्टेटमेंट के बाद इंडेक्स (रिक्वेस्ट) करता हूं, तो दूसरे को रिक्वेस्ट करें (रिक्वेस्ट): कुछ नहीं लौटाएं।
इसे प्राप्त करने का सही तरीका क्या है?
@login_required
def other(request):
if request.method == "POST":
# do the same like in def index(request):
index(request)
else:
# do somthing different
pass
return render(request, "search/index.html")
@login_required
def index(request):
if request.method == "POST":
form = SearchForm(request.POST)
if form.is_valid():
# do something
pass
return render(request, "search/index.html")
उत्तर:
उत्तर № 1 के लिए 1आप रीडायरेक्ट फ़ंक्शन का उपयोग करके इंडेक्स फ़ंक्शन को पुनर्निर्देशित कर सकते हैं। अपनी url.py फ़ाइल में कुछ ऐसा है
url(r"^index/$", "app.views.index", name="index"),
तब आप अपने अन्य दृश्य को अनुक्रमणिका की तरह पुनर्निर्देशित कर सकते हैं
from django.http import HttpResponse
from django.shortcuts import redirect
from django.urls import reverse
def index(request, *args, **kwargs):
# your index code
return HttpResponse(result)
def other(request, *args, **kwargs):
if request.method == "POST":
return redirect(reverse("index", args=args, kwargs=kwargs))
else:
# else code for GET, PUT,...
यदि आप पुनर्निर्देशित नहीं करना चाहते हैं, तो नीचे दिए गए कोड का पालन करें
def index(request, *args, **kwargs):
# your index code
return HttpResponse(result)
def other(request, *args, **kwargs):
if request.method == "POST":
return index(request, *args, **kwargs)
else:
# else code for GET, PUT,...