MEDIA_URL 在基于 class 的视图中
MEDIA_URL in class-based view
我无法在基于 class 的视图中访问 MEDIA_URL
。
我的理解是我会创建我的视图,我的上下文处理器会将它提供到我的基于函数的视图中。现在我正在尝试切换到基于 class,但我无法再访问 MEDIA_URL
.
上下文处理器是否不适用于基于 class 的视图?我现在必须手动将它添加到我的上下文中吗?
这是我的处理器:
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.media',
'django.core.context_processors.static',
'django.core.context_processors.request',
'django.contrib.messages.context_processors.messages',
'django.core.context_processors.request',
)
我以前的观点是这样的:
def my_view(request):
context = {
"foo": "bar"
}
return render(request, 'index.html', context)
而且我可以使用 {{MEDIA_URL}}
。
我基于 class 的视图如下所示:
class MyView(View):
def get(self, request):
context = {
"foo": "bar"
}
return render(request, 'index.html', context)
而且我无法访问 {{MEDIA_URL}}
Django 1.8 将 TEMPLATE_CONTEXT_PROCESSORS
的配置移动到 TEMPLATES
设置。除此之外,我认为您不需要在模板中访问 MEDIA_URL
。这对我来说是一种糟糕的代码味道。您应该使用从文件存储 api(即 {{ model.field.url }}
)生成的 url。
我无法在基于 class 的视图中访问 MEDIA_URL
。
我的理解是我会创建我的视图,我的上下文处理器会将它提供到我的基于函数的视图中。现在我正在尝试切换到基于 class,但我无法再访问 MEDIA_URL
.
上下文处理器是否不适用于基于 class 的视图?我现在必须手动将它添加到我的上下文中吗?
这是我的处理器:
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.media',
'django.core.context_processors.static',
'django.core.context_processors.request',
'django.contrib.messages.context_processors.messages',
'django.core.context_processors.request',
)
我以前的观点是这样的:
def my_view(request):
context = {
"foo": "bar"
}
return render(request, 'index.html', context)
而且我可以使用 {{MEDIA_URL}}
。
我基于 class 的视图如下所示:
class MyView(View):
def get(self, request):
context = {
"foo": "bar"
}
return render(request, 'index.html', context)
而且我无法访问 {{MEDIA_URL}}
Django 1.8 将 TEMPLATE_CONTEXT_PROCESSORS
的配置移动到 TEMPLATES
设置。除此之外,我认为您不需要在模板中访问 MEDIA_URL
。这对我来说是一种糟糕的代码味道。您应该使用从文件存储 api(即 {{ model.field.url }}
)生成的 url。