【问题标题】:Django: How can i get the url of a template by giving the namespace?Django:如何通过提供命名空间来获取模板的 url?
【发布时间】:2013-03-17 15:45:41
【问题描述】:

在渲染模板时,我想通过提供命名空间值而不是路径来检索模板的 url。例如,而不是这个:

return render(request, 'base/index.html', {'user':name})

我希望能够做到以下几点:

from django.shortcuts import render
from django.core.urlresolvers import reverse

return render(request, reverse('base:index'), {'user':name})

但以上会产生错误。我该怎么做?有什么方法可以将命名空间赋予函数并获取实际路径?

扩展示例:

- urls.py

​​>
from django.conf.urls.defaults import patterns, include, url

urlpatterns = patterns('',
    url(r'^', include('base.urls', namespace='base')),
)

- 应用程序库:urls.py

​​>
from django.conf.urls.defaults import patterns, url

urlpatterns = patterns('base.views',
   url(r'^/?$', 'index', name='index'),
)

- 应用程序库:views.py

​​>
from django.shortcuts import render
from django.core.urlresolvers import reverse

def homepage(request):
   '''
   Here instead of 'base_templates/index.html' i would like to pass
   something that can give me the same path but by giving the namespace
   '''
   return render(request, 'base_templates/index.html', {'username':'a_name'})

提前致谢。

【问题讨论】:

  • base/index.html 是模板名称。 reverse 用于 url 名称的反向解析。你的逻辑是错误的。你不能在这里使用reverse

标签: django django-templates render reverse django-context


【解决方案1】:

模板名称在视图中是硬编码的。您还可以做的是,您可以从 url 模式中传递模板名称,更多详细信息请参阅here

from django.conf.urls.defaults import patterns, url

    urlpatterns = patterns('base.views',
       url(r'^/?$', 'index',
          {'template_name': 'base_templates/index.html'},
          name='index'),
       )

然后在视图中获取模板名称:

def index(request, **kwargs):
    template_name = kwargs['template_name']

【讨论】:

    猜你喜欢
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2019-01-14
    • 2012-02-18
    • 2015-11-18
    • 2019-02-01
    相关资源
    最近更新 更多