2011-07-15 34 views
6

Tôi mới dùng Django và đang cố gắng đưa biểu mẫu tệp tải lên vào thẻ bao gồm. Vì vậy, tôi có thể sử dụng nó trong các mẫu khác nhau.Yêu cầu xử lý trong thẻ django inclusion template

Tôi đã tạo ra thẻ bao gồm như sau:

 
#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') 

tôi muốn bây giờ bao gồm này trong mẫu, do đó trên trang Tôi có:

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

{% upload_handler %} 

tôi nhận được lỗi sau:

 
upload_handler takes 1 arguments 

Tôi nên chuyển đối số nào từ mẫu?

Trả lời

11

Bạn cần phải thêm takes_context=True khi đăng ký thẻ để lấy django vượt qua các đối tượng bối cảnh với chức năng:

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

mỗi mặc định context sẽ luôn là đối số đầu tiên sau đó!

Để biết thêm chi tiết, xem tài liệu của django trên inclusion tags.

Lưu ý phụ: Quyết định cẩn thận về những trang bạn sử dụng thẻ mẫu này, vì chế độ xem có thể hiển thị biểu mẫu bổ sung/xử lý yêu cầu bài theo một cách nhất định có thể va chạm với logic mà thẻ của bạn cung cấp (ví dụ: xác thực biểu mẫu sẽ được kích hoạt nếu trang có thể được gọi bằng một yêu cầu gửi đến từ một biểu mẫu khác). Bạn có thể ví dụ. kiểm tra thêm nếu tên của một số phần tử HTML nằm trong request.POST nếu bạn có nhiều biểu mẫu trên một trang!

+0

Tôi đang gặp vấn đề đó !! Tôi sử dụng thẻ mẫu ở mọi nơi trên trang web của mình vì thẻ chứa mẫu đăng nhập. Sau khi đăng nhập, tôi cố gắng chuyển một tham số để sửa đổi một cái gì đó trong thẻ mẫu, (thông qua request.POST) nhưng khi tải lại templatetag đăng nhập lại, request.method = GET !!! vì vậy tôi không thể tìm thấy tham số tha. Làm thế nào tôi có thể tìm thấy thông số đó? – juankysmith

+0

Vâng, phương thức sẽ là 'GET' một lần nữa vì chế độ xem đăng nhập có thể thực hiện chuyển hướng sau khi biểu mẫu được gửi, vì vậy bạn không thể truy cập dữ liệu yêu cầu của mình ở đó ... –

+0

Chính xác, chế độ xem đăng nhập kết thúc bằng chuyển hướng .. . – juankysmith

Các vấn đề liên quan