2012-11-05 55 views
0

我對Django真的很陌生。我很難根據名稱和url格式顯示圖片。什麼是在Django中顯示基於名稱的圖像的正確和有效的方法

所以基本上這個url由它們中的幾個變量組成,我希望能夠使用它來獲取以這些變量命名的特定圖像。

例子:

localhost:8080/farm/chicken 

這將迎接我的../static/images/文件夾內的圖像,並得到:

farm_chicken.jpg 

又如:

localhost:8080/zoo/alligator 

將獲得:

zoo_alligator.jpg 

我可以獲取URL參數。那麼,我是否應該在views.py文件中創建這些圖像名稱,並將名稱(zoo_alligator)傳遞到上下文中以供模板檢索?這是否是正確的方法?

謝謝大家的建議!我感謝所有的幫助!

回答

1

所以,我應該讓這些形象的名字我的views.py文件中,並通過 名稱(zoo_alligator)到上下文要由 模板以後檢索?這是否是正確的方法?

當然,這是一個辦法。事情是這樣的:

(r'show/(?P<in_path>.*)$','someapp.image_view') 

然後在image_view

def image_view(request,in_path): 
    img = in_path.replace('/','_')+'.jpg' 
    return render(request,'some_template.html',{'path':img}) 

然而,隨着你的觀點很簡單 - 你可以直接從urls.py傳遞路徑模板,使用direct_to_template

from django.views.generic.simple import direct_to_template 

(r'show/(?P<in_path>.*)$',direct_to_template,{'template':'some_template.html'}) 

In some_template.html

<img src="{{ params.in_path }}"> 

問題是,由於默認篩選器沒有「替換」功能,因此您不會完成字符串格式設置。您可以輕鬆地編寫自定義過濾器:

@register.filter 
@stringfilter 
def format_path(the_path): 
    return the_path.replace('/','_')+'.jpg' 

然後修改模板:

<img src="{{ params.in_path|format_path }}"> 

你應該閱讀文檔上writing custom filters and tags的更多細節,包括在哪裏存儲過濾代碼,以確保使Django能夠找到它。

+0

Kalid我通過獲取URL並使用它的名稱來動態獲取每個圖像,從而找到了解決方法。 但可悲。我無法得到它加載只是正常的靜態文件,而不是動態獲取.. :( 我不斷收到'無效塊標記:'靜態',預計'endblock''錯誤...仍然沒有' t能夠找出我的問題所在 – user805981

+0

您在模板頂部缺少'{%load static%}' –

+0

當我擴展了base.html時,它已經在那裏了,我真的需要它嗎?再次? – user805981

2

一般來說,你實際上不會那樣做。你應該做的是將圖像作爲上下文變量從視圖函數發送到你的模板。

如果您使用您的url節點來確定要顯示哪個圖片,那麼在相應的視圖函數中,實際上使用「鱷魚」或「雞」來加載相應的Animal類。

像這樣: - - :

一旦正確animal對象實例化時,你會這樣的動物對象使用一個類似的片段發送到圖像中你的Django模板和加載

{% if animal.get_latest_medium_url %} 
    <img id="animal_image" class="img-rounded left" src="/media/{{ animal_image }}" /> 
{% endif %} 

get_latest_medium_url是我的Merchant class中的一種方法,它在那裏計算網址。

相關問題