美文网首页
1.7 为你的视图添加 路由模式

1.7 为你的视图添加 路由模式

作者: gznb | 来源:发表于2020-07-20 16:19 被阅读0次

    为你的视图创建模板

    你已经为你的 blog 应用程序创建了 视图 和 url 模式。 url 模式 把 url 映射到视图,视图决定向用户返回哪些数据。模板定义了如何去展示这些数据,他们通常是结合Django 的模板语言写在 HTML 中。你可以在这个链接中得到更多有关Django 模板语言的知识。

    让我们为你的 应用程序去添加一个模板,以便使用友好的方式去展示 文章。

    在你的 blog 应用程序内部目录中创建下面的目录及文件:

    Snipaste_2020-07-17_22-14-48.jpg

    前面的结构将是你模板 file 的结构,这个 base.html 文件将包括网站的 主要 HTML 结构,分为 主要内容区域和侧边栏。list.htmldetail.html 文件将从 base.html 文件中继承,分别去渲染 博客文章列表和详情视图。

    Django 有一个强大的模板语言,它允许你展示指定的数据,它是基于 template tages , template variables, template filters:

    • template tages 模板标签控制模板的渲染。看起来像 {% tag %}
    • template variables 模板变量当模板被渲染时通过值来进行替换,看起来像 {{ variable }}
    • template filters 模板过滤器允许你修改 变量的显示,看起来像 {{ variable | filter }}

    你可以在这个链接看到所有的 内置 模板标签和模板过滤器。

    编辑 base.html 文件并且添加下面的代码:

    {% load static %}
    <!DOCTYPE html>
    <html>
        <head>
            <title>{% block title %}{% endblock %}</title>
            <link href="{% static "css/blog.css" %}" rel="stylesheet">
        </head>
        <body>
            <div id="content">
            {% block content %}
            {% endblock %}
            </div>
            <div id="sidebar">
                <h2>My blog</h2>
                <p>This is my blog. </p>
            </div>
        </body>
    </html>
    

    {% load static %} 告诉 Django 去加载包含在INSTALLED_APPS 配置 中的django.contrib.staticfiles 应用程序所提供的 静态 模板标签。加载完毕之后,你就可以在模板中使用 {% static %} 模板标签了。在这些模板标签中,你能包括静态文件,例如 blog.css 文件,你可以在 blog 应用程序下的static/ 目录里得示例代码中找到。将本章的代码中的static/目录复制到与您的项目相同的位置,以便将CSS样式应用到模板中。你可以在这个链接中发现这些目录。

    你可以看到这儿有两个 {% block %} 标签,这就是告诉 Django 你想要在 这个区域定义一个快(block)。 继承自这个模板的模板将使用内容填充满这个快。你定义了一个 名为 title 的快 和 一个名为 content 的快。

    让我们来编辑 post/list.html 文件,是他看起来像下面一样:

    {% extends "blog/base.html" %}
    {% block title %}My Blog{% endblock %}
    {% block content %}
        <h1>My Blog</h1>
        {% for post in posts %}
            <h2>
                <a href="{{ post.get_absolute_url }}">
                {{ post.title }}
            </a>
            </h2>
            <p class="date">
                Published {{ post.publish }} by {{ post.author }}
            </p>
            {{ post.body | truncatewords:30 | linebreaks }}
        {% endfor %}
    {% endblock %}
    

    使用 {% extends %} 模板标签,你告诉 Django 是从 blog/base.html 模板中所继承的。然后,使用内容填充基本模板的titlecontent块。你可以通过遍历文章,并且显示他们的 标签,日期,作者,和正文,包括标题中指向 该文章的规范URL 的链接。

    在文章的正文中,你使用了两个模板过滤器: truncatewords 将值截断为指定的单词数,linebreaks 将输出转换为 HTML 的换行符。你可以根据需要连接多个模板过滤器,每一个都应用于前面的一个输出。

    打开 shell 并且允许 python manage.py runserver 命令去启动开发者服务器。在你的浏览器中打开 http://127.0.0.1:8000/blog,你会看到一些输出。请注意,你需要在这里显示一些已发布状态的文章。看起来应该像下面一样:

    Snipaste_2020-07-17_23-05-06.jpg

    接下来编辑 post/detail.html 文件:

    {% extends "blog/base.html" %}
    {% block title %}{{ post.title }}{% endblock %}
    {% block content %}
        <h1>{{ post.title }}</h1>
        <p class="date">
            Published {{ post.publish }} by {{ post.author }}
        </p>
        {{ post.body | linebreaks }}
    {% endblock %}
    

    下一步,你可以返回到你的浏览器,点击一个文章的标题,你可以看到文章的详细内容。你应该看到类似下面的东西:


    Snipaste_2020-07-17_23-09-37.jpg

    看看这个网址,它应该是 /blog/2020/7/17/nice-meet-you/, 你应该为你的博客文章设计一个 SEO 友好的链接。

    相关文章

      网友评论

          本文标题:1.7 为你的视图添加 路由模式

          本文链接:https://www.haomeiwen.com/subject/gudykktx.html