【问题标题】:Django simple website with templates带有模板的 Django 简单网站
【发布时间】:2014-10-09 11:11:50
【问题描述】:

我想在项目级别以模板形式为网站提供一些页面,所以我可以使用页眉和页脚等。

我不需要每个页面的自定义视图,我只想要简单的模板渲染。我的项目有一个 /templates 文件夹,但是对于每个页面我都需要添加一个 url 模式 settings.py

url(r'index.html',TemplateView.as_view(template_name='index.html')),

有没有办法简单地将 /templates 的全部内容映射到 url?也许有比这更好的方法。我可以看到如何使用媒体和静态文件夹执行此操作,但它们不提供模板渲染

【问题讨论】:

  • 我不完全理解您要做什么,但flatpages 是否解决了您的问题?

标签: django django-templates django-views


【解决方案1】:

一种方法是使模板名称与您传递给视图的查询字符串参数匹配:

url(r'^(?P<template>[-\w]+)/$', 'render_template'),
url(r'^$', 'render_template'),


def render_template(request, template=None):
    if not template:
        template = 'home'

    return render(request, template + '.html')

【讨论】:

    【解决方案2】:

    是的,您可以创建单个 url 模式来动态提供 html,但您必须创建自定义视图。

    from django.views.generic import TemplateView
    from django.template import TemplateDoesNotExist
    from django.http import Http404
    
    class MyView(TemplateView):
        def get(self, request, page_name, *args, **kwargs):
            self.template_name = page_name
            response = super(MyView, self).get(request, *args, **kwargs)
            try:
                return response.render()
            except TemplateDoesNotExist:
                raise Http404()
    

    并为您创建一个单独的 url 模式

    from myapp.views import MyView
    
    urlpatterns = patterns('',
        url(r'^(?P<page_name>.+\.html)$', MyView.as_view()),
    )
    

    【讨论】:

    • 能否请您添加保存此代码的文件的名称?
    猜你喜欢
    • 2016-02-28
    • 1970-01-01
    • 2011-09-28
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多