2013-07-25 6 views
15

मैं टेम्पलेट्स में पूर्ण यूआरएल प्राप्त करना चाहता हूं। मैं यूआरएल के साथ नहीं कर सकता। यह मुझे एक सापेक्ष यूआरएल देता है। मैं इस प्राप्त करने की आवश्यकता:Django पूर्ण यूआरएल प्राप्त करें

http://domain.tld/article/post 

लेकिन Django मुझे सिर्फ

/article/post 

मैं settings.py के साथ खेला जाता है, लेकिन यह काम नहीं किया देता है।

खाका कोड (डिबग = false, मेजबान बनाम अनुमति):

{% url 'blog:detail' blog.slug %} 
+0

के संभावित डुप्लिकेट [get \ _absolute \ _url में पूर्ण यूआरएल django] (http://stackoverflow.com/questions/3994060/django- पूर्ण-यूआरएल-इन-गेट-पूर्ण-यूआरएल) – karthikr

+0

https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.build_absolute_uri यह आपकी मदद कर सकता है। –

उत्तर

7

Django के साथ लंबे समय से बैठक के बाद, मैंने बहुत सी चीजें सीखीं। इस मुद्दे के लिए, मैंने एक पूर्ण यूआरएल templatetag बनाया है।

अपने टेम्पलेट टैग को यह जोड़ कर डिफ़ॉल्ट यूआरएल टैग की तरह उपयोग करें:

{% absurl 'some-view' with, arguments %}

Here is the Gist for the absolute URL templatetag, आप अन्यथा यह काम नहीं करेगा, template_context_processors करने के लिए अनुरोध वस्तु जोड़ने की आवश्यकता होगी। इस लक्ष्य को हासिल करने के लिए, अपने settings.py खोलने के लिए और इन निम्न पंक्तियां जोड़ें:

from django.conf import global_settings 
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
    'django.core.context_processors.request', 
) 
+0

आपको टेम्पलेट टैग लोड करने की भी आवश्यकता हो सकती है, उदा। मानते हुए कि फ़ाइल को 'absurl.py' नाम दिया गया है, तो आप अपने टेम्पलेट –

+0

नीट समाधान के शीर्ष पर '{% load absurl%}' जोड़ देंगे। नए जोड़े गए templatetag को लोड करने के लिए django dev सर्वर को पुनरारंभ करना याद रखें। –

29

यह दृश्य में क्या करना आसान है:

from django.core.urlresolvers import reverse 

url = request.build_absolute_uri(reverse('blog:detail', args=[blog.slug])) 

आप टेम्पलेट में यह करने के लिए की जरूरत है, आप शायद बहुत अधिक परेशानी के बिना अपना खुद का टेम्पलेट टैग बना सकते हैं। अपने खाके में

def Home(request): 
    posts = Article.objects.filter(published=True).order_by('-publish') 
    site = Site.objects.get_current() 

    c = RequestContext(request, { 
     'posts': [{'post': post, 
        'url': request.build_absolute_uri(reverse('blog:detail', args=[post.slug]))} 
        for post in posts] 
     'site': site, 
    }) 

    return render_to_response('templates/index.html', c) 

फिर जब तुम {% for postobj in posts %} आप कर सकते हैं के साथ पाशन कर रहे हैं:

संपादित

यह मानते हुए कि आप अपने Home ध्यान में रखते हुए ऐसा करना चाहते हैं, तो आप इस तरह कुछ कर सकता है postobj.post और postobj.url एक्सेस करें।

+0

इसे कहां रखा जाए? मैंने प्रश्नों के लिए विचार और मॉडल जोड़े। कृपया क्या आप मेरी मदद कर सकते हैं? मैं इसे 2 दिनों के लिए काम कर रहा हूं: एस और मैं इसे लूप के लिए उपयोग कर रहा हूं। –

+0

ठीक है, मैंने आपके विचारों के आधार पर एक कोड उदाहरण के साथ उत्तर संपादित किया है। कुछ अन्य नोट्स: 'फ़िल्टर() '' DoNotExist' अपवाद नहीं बढ़ाता है, यह केवल खाली सूची देता है; लेकिन 'get() '_does_' DoNotExist 'अपवाद उठाएं ताकि आपको इसे अपने' विवरण 'दृश्य में देखना चाहिए। –

संबंधित मुद्दे