2009-03-31 24 views
19

Tôi đã kích hoạt bộ xử lý yêu cầu djangodjango trong mẫu

TEMPLATE_PROCESSORS = (
"django.core.context_processors.auth", 
"django.core.context_processors.debug", 
"django.core.context_processors.i18n", 
"django.core.context_processors.media", 
"django.core.context_processors.request", 
) 

Tuy nhiên tôi không phải yêu cầu biến có sẵn trong các mẫu. Tôi đã chuyển nó theo cách thủ công. Sử dụng django 1.0.2 Everywhere trên web có vẻ như nó chỉ khoảng cho phép xử lý yêu cầu ..

Ngoài ra tôi đang sử dụng RequestContext như:

return render_to_response(
    'profile.html', 
    { 
     'persons':Person.objects.all(), 
     'person':Person.objects.get(id=id), 
     'request':request, 
    }, 
    context_instance=RequestContext(request) 
) 

không may mắn

ohh darn tên mới cho đó là TEMPLATE_CONTEXT_PROCESSORS

+0

Tại sao bạn cho phép mẫu biết bất kỳ điều gì về yêu cầu? – yfeldblum

+2

dễ dàng: tôi cần biết đường dẫn * URL * của yêu cầu điều hướng động. tôi đã hoàn thành nó hoạt động ngay bây giờ. – Attila

Trả lời

39

settings.py:

TEMPLATE_CONTEXT_PROCESSORS = (
    # ... 
    'django.core.context_processors.request', 
    # ... 
) 
+0

Cảm ơn Dingo, tôi có một hướng dẫn tại đây http://wiki.workassis.com/django-accessing-request-object-in-template/ –

+2

Trong các phiên bản sau của Djano, hãy sử dụng thay vào đó: 'django.template.context_processors.request' – shacker

10

TEMPLATE_CONTEXT_PROCESSORS thay vì TEMPLATE_PROCESSORS

0

Bạn có chắc chắn bạn không có biến số request có sẵn cho mẫu không? Điều gì sẽ xảy ra khi bạn xóa dòng

'request':request, 

khác với khi có dòng đó. Nếu mẫu của bạn tải cùng một cách, thì vấn đề là với mẫu của bạn.

+0

Đối với tôi đó là chức năng xử lý yêu cầu và cập nhật bối cảnh, thông qua bối cảnh mà không có yêu cầu. Yêu cầu bị mất do đó phải truyền nó theo cách thủ công cho hàm đầu tiên bởi vì không giống như render() nó cũng không thông minh để yêu cầu. Hơi liên quan đến câu trả lời này. – radtek

0

MIDDLEWARE_CLASSES = ( ... 'yourfolder.yourfile.yourclass', ... yourclass:

lớp AddRequestToTemplate: process_templaet_response (bản thân, yêu cầu, phản hồi): response.context_data ['request'] = yêu cầu

4

Được thông báo rằng như của Django 1.8 , điều này đã thay đổi thành cài đặt "TEMPLATES" và trong cấu hình mặc định, bộ xử lý yêu cầu KHÔNG được bao gồm.

TEMPLATES = [ 
{ 
    'BACKEND': 'django.template.backends.django.DjangoTemplates', 
    'DIRS': [ 
     # insert your TEMPLATE_DIRS here 
    ], 
    'APP_DIRS': True, 
    'OPTIONS': { 
     'context_processors': [ 
      # Insert your TEMPLATE_CONTEXT_PROCESSORS here or use this 
      # list if you haven't customized them: 
      'django.contrib.auth.context_processors.auth', 
      'django.template.context_processors.debug', 
      'django.template.context_processors.i18n', 
      'django.template.context_processors.media', 
      'django.template.context_processors.static', 
      'django.template.context_processors.tz', 
      'django.contrib.messages.context_processors.messages', 
     ], 
    }, 
},] 

Chỉ cần thêm bộ xử lý yêu cầu trở lại để khắc phục vấn đề:

'django.core.context_processors.request', 

Mọi chi tiết, xem các Django Upgrading Docs.

+0

Bạn có chắc chắn nó được tắt theo mặc định trong 1.8? https://github.com/django/django/blob/1.8.6/django/conf/project_template/project_name/settings.py#L63 Tôi vừa thử nghiệm trên 1.9.6 với 'django-admin startproject' và nó đã được cũng như https://github.com/django/django/blob/1.9.6/django/conf/project_template/project_name/settings.py-tpl # L63 –

+0

Dự án mới cuối cùng tôi đã thiết lập, nó bị thiếu, nhưng tôi có thể bị nhầm lẫn .... – MontyThreeCard