一千萬個為什麽

搜索

Django模板標簽,生成模板塊標簽

目前有點卡住,想知道是否有人可以提供幫助。我正在使用 django-adminfiles 。這是一個整潔的小應用程序。我想用它將圖像插入到我正在構建的網站的帖子/文章/頁面中。

How django-adminfiles works is it inserts a placeholder i.e <<< ImageFile >>> and this gets rendered using a django template. It also has the feature of inserting custom options i.e (Insert Medium Image) , i figured i would used this to automatically resize images and include it in the post (similar to how WP does it).

Django-adminfiles使用 sorl.thumbnail 應用程序生成縮略圖。

所以我嘗試過測試生成縮略圖:

用於呈現插入圖像的當前模板是:

{% spaceless %}
{% if options.alt %}{{ options.alt }}{% else %}{{ upload.title }}{% endif %}
{% endspaceless %}

我嘗試將其修改為:

{% load thumbnail %}
{% spaceless %}
{% if options.alt %}{{ options.alt }}{% else %}{{ upload.title }}{% endif %}
{% endspaceless %}

我收到錯誤:

Exception Value:    
Caught an exception while rendering: Source file: '/media/uploads/DSC_0014.jpg' does not exist.

我認為縮略圖需要絕對路徑,所以嘗試將其放在模板中,這是有效的。

這是有效的:

{% thumbnail '/Users/me/media/uploads/DSC_0014.jpg' 200x50 %}

所以基本上我需要生成文件的絕對路徑給出相對路徑(到web根目錄)。您可以通過將MEDIA_ROOT設置傳遞給模板來執行此操作,但我想要執行模板標記的原因是以編程方式設置圖像大小。

Update Tried this as per answer below:

templatetag:

from django import template
from proj.settings import MEDIA_ROOT

register = template.Library()

@register.filter(name='path')
def path(value):
    value = MEDIA_ROOT + '/' + value 
    return value

模板:

{% load thumbnail %}
{% load images %}
{% spaceless %}
{% if options.alt %}{{ options.alt }}{% else %}{{ upload.title }}{% endif %}
{% endspaceless %}

最佳答案

sorl需要文件系統位置,因為它是服務端進程。假設您的文件系統地址鏡像您的Web地址,您應該能夠創建自定義過濾器轉換文件位置。

更新</強>

我建議這樣的事情:

{% thumbnail upload.upload.url|path 200x50 %}

轉載註明原文: Django模板標簽,生成模板塊標簽