【问题标题】:How to start forming a django website and how django structures pages?如何开始构建 django 网站以及 django 如何构建页面?
【发布时间】:2012-07-31 15:35:36
【问题描述】:

我为我的个人网站启动了一个 django 项目来学习 django。到目前为止,我已经为我的开发环境设置了所需的一切,并按照this 很棒的教程创建了一些基本的数据结构和模板。现在我想开始使用我之前制作的 html 布局并开始实现它的功能。但是我很难理解如何做到这一点。

在此之前,我主要完成了 Java 门户解决方案,我可以在其中启动服务器、创建一些页面、为它们设置我的主题,然后在任何我想要的地方添加自定义 portlet(功能/代码)。在 django 中,我用我的 html 布局创建了一个视图,它工作正常。但是我不明白我应该如何处理页面。我是否需要为每个 url 和视图配置创建一个单独的视图,然后为每个页面使用相同的 html 布局,并且只在需要的地方设置不同的功能?看起来不像 django 方式,因为少即是多。我想我可以像使用 portlet 一样使用视图,以便它们成为某个页面的一部分(这本身就是一个视图?)对吧?就像页面某个部分的投票一样。如何?

因此,例如,我希望有一个首页,其中有一个特定的“主题”(html 布局),也许还有最新的博客文章。然后是另一个名为资源的页面,其中有相同的“主题”和可下载内容的列表。自然是在布局中的某处导航以在页面之间切换。

如果有人能指出正确的方向,我将不胜感激!

【问题讨论】:

    标签: django django-templates django-views


    【解决方案1】:

    您可以通过使用 Django 模板继承来做到这一点。您将创建一个“主页”模板,并使用{% block content %}{% endblock %} 定义博客帖子的位置。在您将显示博客文章的模板(这是一个单独的 HTML 文件)中,您将放置 {%extends "home.html"%} 和相同的 {% block content %}{% endblock %},在 {% block content %}{% endblock %} 中,您将放置博客文章的 HTML 代码。

    当 Django 加载主页时,它会查看您在其他模板中还有哪些名为“content”的块,并会加载其中的任何内容,在这种情况下,就是您的博客文章。

    让我给你看一个小例子:

    home.html

    <title>Home</title>
    <head>
    <style type="text/css">
        .content-wrapper{
            text-decoration:none;
        border: 1px none;
            height: 50%;
            left: 0%;
            position: relative;
            top: 8%;
            width: 100%;
            height: 100%;
            z-index: 0;
         }
    </style>
    </head>
    <body>
    <div class="content-wrapper">
    {% block content %}{% endblock %}
        </div>
    </body>
    

    和 blog-posts.html

    {%extends "home.html"%}
     <head>PUT HERE ALL THE CSS STYLESHEETS YOU'LL BE USING AND PUT THEM ALSO IN HOME.HTML</head>
    <body>
       {%block content%}
          HTML FOR YOUR BLOG POSTS
       {%endblock%}
    </body>
    

    这样你将不得不做单独的模板,但会少得多的代码。而且您必须将它们指向 urls.py,因为它们的行为几乎就像框架一样。

    urls.py

    urlpatterns = patterns('',
    url(r'^blog-posts/','Mod031.views.blog-posts'),
        url(r'^home/', 'Mod031.views.home', name='home'),
    )
    

    您还将有一个视图来加载您需要的每个模板

    def home (request):
    return render_to_response('home.html', context_instance=RequestContext(request))
    
    def blog-posts(request):
    return render_to_response('blog-posts.html', context_instance=RequestContext(request))
    

    如需更多信息,请阅读文档:The Django template language

    【讨论】:

    • 非常感谢您的详尽解答!不知何故,我只是没能在这里看到整个画面,尽管现在一切看起来都很清楚。我希望有一种方法可以以另一种方式管理页面,而不是使用 urls.py 和 views.py 配置,例如,如果想要创建一个普通用户可以创建简单页面的网站,该页面使用之前提到的博客文章等功能,他们可以只使用管理面板或类似的方式来执行此操作。也许有人已经自己制作了这样的插件。不过,既然我理解了模板系统,我对它非常满意,所以谢谢!
    • 哦,很高兴能帮上忙!在我发送答案后,我正在考虑更多。如果您计划将它们与链接相关联,例如在菜单中,则每个模板只需要一个视图。当您从菜单中单击一个选项时,该选项将具有一个a href,它将指向将在我之前提到的内容块内呈现的子模板。
    猜你喜欢
    • 1970-01-01
    • 2018-08-20
    • 2011-08-06
    • 2020-10-18
    • 1970-01-01
    • 2015-07-13
    • 2019-01-21
    • 1970-01-01
    • 2014-10-09
    相关资源
    最近更新 更多