2012-01-13 11 views
13

मैं अपने Django ऐप्लिकेशन में निम्नलिखित मॉडल मिल गया है:टेम्पलेट के भीतर ImageField URL कैसे प्राप्त करें?

class Image(models.Model): 
    image = models.ImageField(
     upload_to='images/', 
     height_field='height', 
     width_field='width' 
    ) 
    credit = models.CharField(max_length=50, blank=True) 
    caption = models.TextField(blank=True) 
    article = models.ForeignKey(Article) 
    width = models.PositiveIntegerField(
     blank = True, null = True, 
     editable = False, 
     default = 0 
    ) 
    height = models.PositiveIntegerField(
     blank = True, null = True, 
     editable = False, 
     default = 0 
    ) 

मैं एक निर्देशिका/hmedia/अंदर मेरे अपाचे वेब जड़ कहा जाता है MEDIA_ROOT निर्धारित किया है, और मैं 'http://localhost/hmedia/' को MEDIA_URL निर्धारित किया है। ऐसा लगता है कि मैंने काम किया है - मैंने Django व्यवस्थापक साइट के माध्यम से सफलतापूर्वक कुछ छवियां अपलोड की हैं, और मैं उन छवियों को http://localhost/hmedia/images/[filename] के माध्यम से देख सकता हूं। और Django व्यवस्थापक साइट वास्तव में मुझे फ़ाइल नाम दिखाता है, और प्रत्येक छवि के लिए लाइव यूआरएल के लिंक, और लिंक काम करते हैं।

मेरे समस्या यह है, मैं बाहर काम नहीं कर सकता मेरे टेम्पलेट में URL या इन चित्रों में से फ़ाइल नाम पाने के लिए:

<ul> 
{% for image in article.image_set.all %} 
    <li>Caption: "{{image.caption}}", Credit: "{{image.credit}}", URL: "{{image.url}}"</li> 
{% endfor %} 
</ul> 

इस उत्पादन में ऊपर टेम्पलेट परिणाम:

<ul> 

    <li>Caption: "here's an image caption", Credit: "some photographer", URL: ""</li> 

    <li>Caption: "Another caption here", Credit: "Another photographer", URL: ""</li> 

</ul> 

दूसरे शब्दों में, यह प्रत्येक छवि के कैप्शन और क्रेडिट गुणों को सही ढंग से आउटपुट करता है, लेकिन यह {{image.url}} के लिए कुछ भी आउटपुट नहीं करता है।

मैं अपने टेम्पलेट में छवि का यूआरएल कैसे प्राप्त करूं? Django व्यवस्थापक इंटरफ़ेस टेम्पलेट यह कैसे करता है? (मैं व्यवस्थापक टेम्पलेट्स निर्देशिका में चारों ओर निहित है, लेकिन मैं के लिए क्या देख रहा हूँ नहीं मिल सकता है।)

+2

तुम बस अपने आप छवि मैदान पर .path और .url का उपयोग करने की जरूरत है उपयोग कर सकते हैं - तो 'image.image.path', 'Image.image.url'। जैसा कि, आप मॉडल उदाहरण पर उन विशेषताओं तक पहुंचने का प्रयास कर रहे हैं, जहां वे मौजूद नहीं हैं। – AdamKG

उत्तर

30

आप {{ image.image.url }} & {{ image.image.path }} की जरूरत है, जबकि {{ image }} - बस एक छवि वस्तु

1

इस के लिए अपने कोड को बदलें :

<ul> 
{% for image in article.image_set.all %} 
    <li>Caption: "{{ image.caption }}", Credit: "{{ image.credit }}", URL: "<a href ='/{{ image.image }}'{{ image.image }}</a>"</li> 
{% endfor %} 
</ul> 

बदलें {{image.url}} को {{image.image}} क्योंकि '.image' छवि के स्थान शामिल हैं। कारण है कि आपको '.url' से कोई मूल्य नहीं मिलता है कि आपके मॉडल में आपकी कक्षा छवि में फ़ील्ड यूआरएल नहीं है।

-6

एक फ़ोल्डर बनाएँ "स्थिर" में आप Django परियोजना रहे हैं और आप सेटिंग में करने के लिए आप सेटिंग्स दायर कर रहे हैं

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'), 
) 

इस ऐड आप इस लाइन नहीं है, तो भी यह

जोड़ने फ़ाइल
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 

अब टेम्पलेट में आप

{% static image.image.url %} 
+2

यह काम नहीं करेगा, क्योंकि छवि फ़ील्ड फ़ील्ड स्थिर फाइलों से संबंधित नहीं हैं !! – azuax

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