【问题标题】:Access to RequestContext in Django template?在 Django 模板中访问 RequestContext?
【发布时间】:2012-09-06 02:10:00
【问题描述】:

我似乎无法访问我的 django 模板中的请求对象。

这是我的 settings.py 文件的一部分:

import django.conf.global_settings as DEFAULT_SETTINGS
TEMPLATE_CONTEXT_PROCESSOR = DEFAULT_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
    'django.core.context_processors.request',
)

urls.py

urlpatterns = patterns('',
    url(r'^event/create/$', EventCreateView.as_view(), name='create_event'),
    url(r'^event/update/(?P<pk>\d+)/$', EventUpdateView.as_view(), name='update_event'),
    url(r'^event/delete/(?P<pk>\d+)/$', EventDeleteView.as_view(), name='delete_event'),
)

views.py

from django.views.generic import CreateView, UpdateView, DeleteView
from events.models import Event
from events.forms import EventForm

class EventCreateView(CreateView):
    model = Event
    form_class = EventForm

class EventUpdateView(UpdateView):
    model = Event
    form_class = EventForm

class EventDeleteView(DeleteView):
    model = Event

forms.py

from django.forms import ModelForm
from events.models import Event

class EventForm(ModelForm):
    class Meta:
        model = Event

event_form.html(用于 CreateView/UpdateView)

{% block content %}
    <form action='{{ request.get_full_path }}' method='post'>
        {% csrf_token %}
        <table>
            {{ form.as_table }}
        </table>
        <input type='submit' value='Create event!' />
    </form>
{% endblock %}

上面,request.session 似乎什么也没做。我试过查看文档和类似的问题,但似乎没有任何效果。有什么想法吗?

提前致谢。

【问题讨论】:

  • request.session 是字典类型,而不是 URL。 form action="" 必须是路径。
  • 是的。我的意思是 request.get_full_path。对不起。现在有什么想法吗?
  • 我对基于类的视图了解不多。但希望这会有所帮助:gregaker.net/2012/apr/19/how-do-django-class-based-views-work
  • 这有助于我理解基于类的视图,但我仍然看不出为什么 {{ request.get_full_path }} 不会输出完整路径!不过,感谢您的帮助。

标签: django django-templates django-generic-views django-context


【解决方案1】:

您有一个错字,TEMPLATE_CONTEXT_PROCESSORS 末尾缺少“S”,也许只是在您的问题中?设置应该是:

TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth",
 "django.core.context_processors.debug",
 "django.core.context_processors.i18n",
 "django.core.context_processors.media",
 "django.core.context_processors.static",
 "django.core.context_processors.tz",
 "django.contrib.messages.context_processors.messages",
 "django.core.context_processors.request",)

,不是TEMPLATE_CONTEXT_PROCESSOR = ...。我更喜欢完全覆盖该设置,以便清楚什么是活动的(例如,您可能希望在生产中禁用调试)。

【讨论】:

    【解决方案2】:

    你使用 Django 的 Session 框架吗?那么是的,request.session 什么都不做,因为会话是一个类似字典的对象,而模板引擎不知道如何渲染它。

    【讨论】:

    • 抱歉错误。我的意思是 request.get_full_path。我会编辑它。
    猜你喜欢
    • 2011-10-04
    • 2016-01-17
    • 2010-12-02
    • 2011-07-10
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多