2012-12-13 5 views
10

Django टेम्पलेट के अंदर, मैं वस्तु के पी का उपयोग कर वस्तु का नाम प्राप्त करना चाहते हैं। उदाहरण के लिए, यह देखते हुए कि मैं कक्षा A से वस्तु की pk है, मैं निम्नलिखित की तरह कुछ करना चाहते हैं:कैसे Django टेम्पलेट के अंदर पी से वस्तु प्राप्त करने के लिए?

{{ A.objects.get(pk=A_pk).name }} 

मैं यह कैसे कर सकते हैं?

+5

कि संभव नहीं है, आप क्या करना चाहिए का उपयोग करें कि आपके views.py में: 'एक = A.objects.get (pl = A_pk) 'तो यह अपने खाके में दिखाने:' {{a.name}} ' –

उत्तर

11

डॉक्स से The Django Template Language पर:

Accessing method calls:

क्योंकि Django जानबूझकर टेम्पलेट भाषा में उपलब्ध तर्क प्रसंस्करण की मात्रा को सीमित, यह संभव नहीं से एक्सेस किया विधि कॉल करने के लिए तर्क पारित करने के लिए है टेम्पलेट्स। डाटा दृश्य में गणना की जानी चाहिए, तो प्रदर्शन के लिए टेम्प्लेट के पारित कर दिया।

तो आप देखते हैं, तो आप अपने views.py:

def my_view(request, A_pk): 
    ...  
    a = A.objects.get(pk=A_pk)  
    ... 
    return render_to_response('myapp/mytemplate.html', {'a': a}) 

में और अपने खाके में इस की गणना की जानी चाहिए:

{{ a.name }} 
{{ a.some_field }} 
{{ a.some_other_field }} 
2

आप ऐसा नहीं कर सकते Django में। From the docs:

क्योंकि Django जानबूझकर तर्क टेम्पलेट भाषा में उपलब्ध प्रसंस्करण की मात्रा को सीमित है, यह टेम्पलेट्स से एक्सेस किया विधि कॉल करने के लिए तर्क पारित करने के लिए संभव नहीं है। डाटा दृश्य में गणना की जानी चाहिए, तो प्रदर्शन के लिए टेम्प्लेट के पारित कर दिया।

0

यह बिल्कुल स्पष्ट नहीं है कि आप क्या करने की कोशिश कर रहे हैं लेकिन आपको यह पता लगाना चाहिए कि आप दृश्य में अपना वांछित परिणाम कैसे प्राप्त कर सकते हैं और चर या ऑब्जेक्ट को टेम्पलेट पर भेज सकते हैं।

7

आप करना चाहते हैं तो अपने खुद के टैग जोड़ सकते हैं। इस तरह:

from django import template 
register = template.Library() 

@register.simple_tag 
def get_obj(pk, attr): 
    obj = getattr(A.objects.get(pk=int(pk)), attr) 
    return obj 

फिर अपने टेम्पलेट में लोड टैग

{% load get_obj from your_module %} 

और यह

{% get_obj "A_pk" "name" %} 
संबंधित मुद्दे