一千萬個為什麽

搜索

無法從Django小部件的模板中獲取MEDIA_URL

我是一個新的Djangoer,並弄清楚如何構建自定義小部件,我的問題是無法在我的小部件模板中獲取MEDIA_URL,而表單使用MySelectWidget能夠獲取MEDIA_URL本身。

#
#plus_sign.html
#

    Add 

^無法將{{MEDIA_URL}}加載到此小部件的模板,因此無法正確加載.gif圖像。 :( </強>

#
#custom_widgets.py
#
from django import forms

class MySelectMultiple(forms.SelectMultiple):

    def render(self, name, *args, **kwargs):
        html = super(MySelectMultiple, self).render(name, *args, **kwargs)
        plus = render_to_string("plus_sign.html", {'field': name})
        return html+plus

#
#forms.py
#
from django import forms
from myapp.custom_widgets.py import MySelectMultiple

class MyForm(forms.ModelForm):
contacts = forms.ModelMultipleChoiceField(Contact.objects, required=False, widget=MySelectMultiple)

#
#views.py
#

def AddContacts(request):
    if request.method == 'POST':
        form = MyForm(request.POST)

        if form.is_valid():
            cd = form.cleaned_data
            new = form.save()
            return HttpResponseRedirect('/addedContact/')
    else:
        form = MyForm()

    return render_to_response('shop/my_form.html', {'form': form}, context_instance=RequestContext(request))


#
#my_form.html
#
{% extends "base.html" %}

{% block content %}
   {{ form.contacts }}
{% endblock %}

請讓我知道如何正確加載小部件的圖像。非常感謝您的回復。

最佳答案

只有在使用 RequestContext 時才會應用上下文處理器。

你的渲染方法應該是這樣的:

from django.template import RequestContext

def render(self, name, *args, **kwargs):
    html = super(MySelectMultiple, self).render(name, *args, **kwargs)
    context = RequestContext({'field': name})
    plus = render_to_string("plus_sign.html", context)
    return html + plus

並且,正如@czarchaic所提到的,確保媒體上下文處理器位於 TEMPLATE_CONTEXT_PROCESSORS 中(默認情況下應該是這樣)。

Docs link.

轉載註明原文: 無法從Django小部件的模板中獲取MEDIA_URL