2011-07-15 19 views
6

Django'da yeniyim ve bir karşıya yükleme etiketi içine bir yükleme dosyası formu yerleştirmeye çalışıyorum. Böylece çeşitli şablonlarda kullanabilirim.Django inclusion template etiketinde bulunan istek isteği

aşağıdaki içerme etiketi oluşturduktan: Sayfadaki Ben bu yüzden

 
#upload_files.py 

@register.inclusion_tag('upload_form.html') 
def upload_handler(context): 
    request = context['request'] 
    view_url = reverse('upload.views.upload_handler') 
    if request.method == 'POST': 
     form = UploadForm(request.POST, request.FILES) 
     if form.is_valid(): 
      form.save() 
     return HttpResponseRedirect(view_url) 

    upload_url, upload_data = prepare_upload(request, view_url) 
    form = UploadForm() 

    upload_model_list = UploadModel.objects.all().order_by('-pub_date') 
keşke

şimdi bir şablonda bu içerecek şekilde:

 
#mypage.html 
{% extends 'base.html' %} 
{% load upload_files %} 

{% upload_handler %} 

aşağıdaki hatayı alıyorum:

 
upload_handler takes 1 arguments 

Şablondan hangi argümanı geçmeliydim?

cevap

11

Sen etiketi kaydederken django işlevine bağlam nesnesi geçirmek için takes_context=True eklemem gerekiyor: varsayılan context Başına

@register.inclusion_tag('upload_form.html', takes_context=True) 

daima daha sonra ilk argüman olacak!

Daha fazla ayrıntı için django'nun belgelerine bakın inclusion tags. Bir yan not: Bu şablon etiketini hangi sayfalarda kullandığınıza dikkat edin; çünkü bir görünüm, ek formları/tanıtıcı isteklerini, etiketinizin sağladığı mantıkla çakışabilecek belirli bir şekilde oluşturabilir (örn. Form doğrulaması). Sayfa başka bir formdan gelen posta isteği ile çağrılabilirse tetiklenir). Örneğin yapabilirsin. Ayrıca, bir sayfada birden çok form varsa, bazı HTML öğelerinin adının request.POST içeriğinde olup olmadığını kontrol edin!

+0

Bu sorunu yaşıyorum! Web sayfamda her yerde bir şablon etiketi kullanıyorum, çünkü giriş formunu içeriyor. Oturum açtıktan sonra, şablon etiketindeki bir değişikliği (request.POST aracılığıyla) değiştirmek için bir parametreyi geçmeye çalışıyorum, ancak giriş şablonunu tekrar yüklediğinde request.method = GET !!! bu yüzden tha parametresini bulamıyorum. Bu parametreyi nasıl bulabilirim? – juankysmith

+0

Yine de yöntem GET 'olacaktır, çünkü giriş görünümü büyük olasılıkla form gönderildikten sonra bir yönlendirme yapar, bu yüzden istek verilerinize buradan erişemezsiniz ... –

+0

Tam olarak, giriş görünümü bir yönlendirme ile biter .. . – juankysmith

İlgili konular