2009-02-08 19 views
15

मैं Django के साथ चारों ओर टूलिंग कर रहा हूं और मुझे आश्चर्य है कि टेम्पलेट सिस्टम का उपयोग कर पिछले पृष्ठ पर "बैक" लिंक बनाने का एक आसान तरीका है या नहीं।Django टेम्पलेट्स: "बैक" लिंक बनाएं?

मुझे लगता है कि सबसे बुरे मामले में मैं दृश्य जानकारी में अनुरोध ऑब्जेक्ट से यह जानकारी प्राप्त कर सकता हूं, और इसे टेम्पलेट प्रतिपादन विधि के साथ पास कर सकता हूं, लेकिन मुझे उम्मीद है कि मैं इस बॉयलरप्लेट कोड से किसी भी तरह से बच सकता हूं।

मैंने Django टेम्पलेट दस्तावेज़ों की जांच की है और मैंने कुछ भी नहीं देखा है जो स्पष्ट रूप से इसका उल्लेख करता है।

+0

जब आप वापस जाएं, पृष्ठ फिर से प्रस्तुत किया जाता है, इसका मतलब है कि कोई भी प्रसंस्करण (डेटाबेस क्वेरीज, संसाधन डाउनलोडिंग आदि) फिर से होता है। इसे रोकने के लिए, '@ cache_page' सजावट का उपयोग करें। –

उत्तर

12

वैसे आप सक्षम कर सकते हैं:

'django.core.context_processors.request', 

अपने settings.TEMPLATE_CONTEXT_PROCESSORS ब्लॉक में और संदर्भ बाहर हुक लेकिन यह है कि एक सा वमनकारी है और हर जगह तोड़ सकते थे।

अधिकतर स्थान जहां आप यह चाहते हैं (उदाहरण के लिए एसओ पर संपादन पोस्ट पेज) आपके पास एक वास्तविक वस्तु है (उस उदाहरण में, पोस्ट) ताकि आप आसानी से काम कर सकें कि उचित पिछले पृष्ठ क्या होना चाहिए हो।

<a href="javascript:history.go(1)">Back</a> 
+0

यह अच्छी जानकारी है, और मैंने इसे पढ़ने के बाद दस्तावेज़ों में "Model.get_absolute_url" पर ठोकर खाई। यह वास्तव में मेरे मामले में समस्या हल करता है, लेकिन अगर आपके पास कोई ऑब्जेक्ट नहीं है तो मैं अभी भी कार्रवाई का सबसे अच्छा तरीका उत्सुक हूं। –

+0

वास्तव में परिस्थिति पर निर्भर करता है। अगर वहाँ काम कर रहे हैं जो पेज पिछले पृष्ठ हो "चाहिए" के कुछ रास्ता है, मुझे लगता है कि जिस तरह से जाना चाहते हैं .. लेकिन कुछ समय है कि संभव नहीं है और संदर्भ की जाँच अपने ही एकमात्र विकल्प हो सकता है (दे के अलावा अन्य उपयोगकर्ताओं को अपने वापस बटन का उपयोग करें) । – Oli

+0

मैं एक बार सत्र चर के माध्यम से ऐसा करने की कोशिश कर के रास्ते नीचे चला गया है, लेकिन यह एक गलती थी; भंगुर और हर समय तोड़ दिया। आपके विकल्प ओली का उल्लेख है, या फिर उनके लिए बैक बटन पर क्लिक करने के लिए जावास्क्रिप्ट का उपयोग करना। –

0

तुम हमेशा ग्राहक के पक्ष विकल्प जो बहुत सरल है उपयोग कर सकते हैं।

<input type=button value="Previous Page" onClick="javascript:history.go(-1);"> 
+3

मुझे वास्तव में ऐसे लिंक से नफरत है। सबसे पहले, वे जब आप एक सहेजे गए लिंक/एक और साइट से एक पृष्ठ के लिए आते हैं काम नहीं करता। दूसरे, मैं केवल विश्वसनीय साइटों (NoScript फ़ायरफ़ॉक्स एक्सटेंशन का उपयोग कर) के लिए जावास्क्रिप्ट सक्षम करें। अन्य कारण भी हैं, लेकिन टिप्पणी स्थान सीमित है। –

+3

बदसूरत, लेकिन वैध जवाब। – muhuk

+0

यह कभी भी सबसे अच्छा कोडिंग नहीं है जिसे मैं सहमत हूं। लेकिन उच्च लाभ अति सरल है और यह काम करता है। यदि आप किसी भिन्न साइट से आते हैं तो यह भी काम करेगा क्योंकि ब्राउजर बैक कार्यक्षमता का उपयोग करके आप कहां से आए थे। – nivhab

25

वास्तव में यह go(-1) है:

+3

अन्य उत्तरों के जवाब किसी भी उत्तर में नहीं टिप्पणी में हैं। –

+1

@ टीएम: यह एक सही जवाब है, इसलिए यह स्वयं के जैसा ठीक है। – aehlke

+2

बदसूरत, लेकिन –

15

यह समाधान मेरे लिए काम किया:

<a href="{{request.META.HTTP_REFERER}}">Go back</a> 

लेकिन वह पहले से अपनी परियोजना की सेटिंग में TEMPLATE_CONTEXT_PROCESSORS को 'django.core.context_processors.request', जोड़ने है।

+0

मई 2016 में इसे उपयोगी और साफ ढूँढना !!! –

+0

यह काम करता है, लेकिन django 1.10 के बाद है: 'django.template.context_processors.request', –

0

Django व्यवस्थापक क्या मैं अंत करने के लिए परिवर्तन रूपों में एक 'वापस' बटन के लिए पार्स और टेम्पलेट में 'preserved_filters' चर डिकोड करने के लिए एक कस्टम टेम्पलेट फिल्टर है। मैं एक स्वनिर्धारित टेम्पलेट्स/व्यवस्थापक/submit_line.html फ़ाइल पर निम्नलिखित रखा:

<a href="../{% if original}../{% endif %}?{{ preserved_filters | decode_filter }}"> 
    {% trans "Back" %} 
</a> 

और फिर एक कस्टम टेम्पलेट फिल्टर बनाया:

from urllib.parse import unquote 
from django import template 

def decode_filter(variable): 
    if variable.startswith('_changelist_filters='): 
     return unquote(variable[20:]) 
    return variable 

register = template.Library() 
register.filter('decode_filter', decode_filter) 
0

ग्राहक के पक्ष समाधान का उपयोग करना उचित समाधान होगा।

<a href="javascript:history.go(-1)" class="btn btn-default">Cancel</a> 
संबंधित मुद्दे