【问题标题】:How to rebuild template for django?如何为 django 重建模板?
【发布时间】:2015-04-02 21:16:44
【问题描述】:

在我的项目中(基于 django 1.7)我有一个模板:

views.py:

def help(request, page, anchor):
    return render(request, 'help.html')

help.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <TITLE>FinBox Help - {{ pagename }}</TITLE>

        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

        <link rel="icon" href="media/pic/favicon.png" type="image/png">
        <link rel="shortcut icon" href="media/pic/favicon.png" type="image/png">
        <link rel="stylesheet" href="/media/css/docs.css" type="text/css">

        <script type="text/javascript">
            function tree_toggle(event) {
                event = event || window.event
                var clickedElem = event.target || event.srcElement

                if (!hasClass(clickedElem, 'Expand')) {
                        return // click out the list
                }

                // Node, on which we've clicked
                var node = clickedElem.parentNode
                if (hasClass(node, 'ExpandLeaf')) {
                        return // click on the list
                }

                // define a new class for node
                var newClass = hasClass(node, 'ExpandOpen') ? 'ExpandClosed' : 'ExpandOpen'
                // replace the current class on newClass
                // regexp finds isolated open|close and change it to newClass
                var re =  /(^|\s)(ExpandOpen|ExpandClosed)(\s|$)/
                node.className = node.className.replace(re, '$1'+newClass+'$3')
            }


            function hasClass(elem, className) {
                    return new RegExp("(^|\\s)"+className+"(\\s|$)").test(elem.className)
            }
        </script>

        <style type="text/css">
        body
        {
            background-color: white;
            background-image: none;
            color: black;
            font-family: Arial, Sans-Serif;
            font-size: smaller;
            font-style: normal;
        }

           A {
            text-decoration: none;
           }
           A:hover {
            text-decoration: underline;
            color: red;
           }
        </style>
    </head>

    <body>

        {% csrf_token %}

        <div style="float:left; margin-left:310px;">
            Explanation how it works.
        </div>

        <div style="position:fixed; width:300px;">
            <div onclick="tree_toggle(arguments[0])">
                <ul class="Container">
                    <li class="IsRoot">
                        <div class="Expand">

                        </div>

                        <div class="Content">
                            Content
                        </div>

                        <ul class="Container">
                            <li class="Node ExpandClosed">
                                <div class="Expand">

                                </div>


                                <div class="Content">
                                    <a href="/help/pur/">
                                        Destination
                                    </a>
                                </div>

                                <ul class="Container">
                                    <li class="Node ExpandLeaf IsLast">
                                        <div class="Expand">

                                        </div>

                                        <div class="Content">
                                            <a href="/help/test/">
                                                тест
                                            </a>
                                        </div>
                                    </li>
                                </ul>
                            </li>

                            <li class="Node ExpandLeaf IsLast">
                                <div class="Expand">

                                </div>

                                <div class="Content">
                                    <a href="/help/errors/">
                                        System Exceptions
                                    </a>
                                </div>
                            </li>
                        </ul>
                    </li>
                </ul>
            </div>
        </div>
    </body>
</html>

我必须更换:

<ul class="Container"></ul>

与必须呈现目录结构的动态代码部分:

for root, dirs, files in os.walk(startpath):
    print root, dirs, files

如何更好地以 django 模板的方式执行它?我查看了文档,看起来我需要从头开始重新编写它并简化为基于类的模板。是对还是没必要? http://www.tangowithdjango.com/book/chapters/templates.html

谢谢!

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

    首先,您应该分别考虑要在前端显示的项目以及如何在后端收集它们。让我们从后者开始。

    看起来你正在整理一个列表。你想如何准备那个列表,或者它是否作为列表并不重要(如果你愿意,你也可以传递对象——尽管我不建议在一般实践中这样做,因为你可能会不小心传递到前端你不想做的事情),只要你这样做。这段代码很可能会在你的 app/views.py 中执行

    获得此列表后,您需要将其传递给模板以进行渲染。通过将上下文(在下面名为 mycontext 的示例中)传递给您的模板,方法如下:

     return render(request, 'help.html', context = mycontext)
    

    在您的模板中,您现在可以调出您通过上下文传递的任何内容。如果您愿意,您甚至可以通过此上下文执行 for 循环。有关动态模板的更多详细信息,请点击此处:https://docs.djangoproject.com/en/1.7/ref/templates/builtins/

    【讨论】:

      猜你喜欢
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 2015-05-25
      相关资源
      最近更新 更多