【问题标题】:django tag { % block content % } isn't workingdjango 标签 { % block content % } 不工作
【发布时间】:2022-01-27 05:21:29
【问题描述】:

所以我刚开始学习 django,我了解基本的标签块,但它在我的页面上效果不佳。我有名为 index.html 和 question.html 的页面

我在 index.html 中是这样写的

<body>
    <div>
        <div>
            sum content
        </div>
        <div>
            { % block content % }

            { % endblock % }
        </div>
    </div>
</body>

在 question.html 中像这样:

{ % extends 'index.html' % }

{ % block content % }
<<my content>>
{ % endblock % }

但 question.html 中的内容没有显示在 index.html 中。我检查了我的设置,并没有像其他情况那样有 django-stub。

如果你想知道结构,它是这样的:

djangoProject1
   >djangoProject1
   >myweb
   >static
   >templates
      -index.html
      -question.html

这是我的观点.py

def index(request):
    return render(request, 'index.html')


def question(request):
    return render(request, 'question.html')


def formdata(request):
    nama = request.POST.get("namaa")
    umur = request.POST.get("umur")
    komorbid = request.POST.get("penyakit_bawaan")
    ruang = request.POST.get("ketersediaan_ruang")
    demam = request.POST.get("demam")
    lelah = request.POST.get("lelah")
    batuk = request.POST.get("batuk")
    nyeri = request.POST.get("nyeri")
    tersumbat = request.POST.get("tersumbat")
    pilek = request.POST.get("pilek")
    sakit_kepala = request.POST.get("sakit_kepala")
    tenggorokan = request.POST.get("tenggorokan")
    diare = request.POST.get("diare")
    hilang_cium = request.POST.get("hilang_penciuman")
    ruam = request.POST.get("ruam")
    sesak = request.POST.get("sesak")
    sulit_gerak = request.POST.get("sulit_gerak")
    nyeri_dada = request.POST.get("nyeri_dada")
    hasil_rekomendasi = request.POST("hasil_rekomendasi")

    data_resp = DataResponden(nama=nama, umur=umur, penyakit_bawaan=komorbid, ketersediaan_ruang=ruang, demam=demam,
                              lelah=lelah, batuk=batuk, nyeri=nyeri, tersumbat=tersumbat, pilek=pilek,
                              sakit_kepala=sakit_kepala, tenggorokan=tenggorokan, diare=diare,
                              hilang_penciuman=hilang_cium, ruam=ruam, sesak=sesak, sulit_gerak=sulit_gerak,
                              nyeri_dada=nyeri_dada, hasil_rekomendasi=hasil_rekomendasi)
    data_resp.save()
    return render(request, 'question.html')

提前谢谢你!

【问题讨论】:

  • “没有出现”是指访问网站时查看页面来源吗?因为模板文件保持这样,django 在运行时处理所有事情并呈现一个组合页面。
  • 为什么标签{ % extends 'index.html' % }之间有空格,应该是{% extends 'index.html' %},去掉所有的空格,它应该可以工作。
  • @shriakhilc 是的,我检查了 /question 它显示了,但是如果我检查了 /index,有问题的内容没有显示..
  • @Celoo 你能把代码贴在你的views.py 吗?如果/index 只加载 index.html,那么它不会包含问题的内容,div 将为空。那是基础文件。 /question 将有项目,因为您正在扩展基本 html,然后覆盖内容标记以插入内容。
  • @shriakhilc 更新了 views.py,“/question 将包含项目,因为您正在扩展基本 html,然后覆盖内容标记以插入内容。”
    所以这意味着我的 /question 将包含 /index 的内容?

标签: html django django-templates pycharm tags


【解决方案1】:

您似乎对模板的工作方式有些困惑。 index.html 是父/基模板,因为它正在被扩展(通过{% extends 'index.html' %} 标记)。 question.html 是一个子模板,这意味着如果您不进行任何更改,它将继承 index.html 的所有内容。

子模板可以使用{% block %} 标签覆盖父模板的部分内容。因此,当网页呈现时,根本不使用父块中的代码(如果有的话)。当你直接渲染父模板时,不会有这样的替换,因为它没有扩展任何东西。

所以你的文件呈现的 HTML 应该如下所示

index.html

<body>
    <div>
        <div>
            sum content
        </div>
        <div>
        </div>
    </div>
</body>

question.html

<body>
    <div>
        <div>
            sum content
        </div>
        <div>
            <<my content>>
        </div>
    </div>
</body>

是的,question.html 中的内容不应该出现在index.html 中。它反过来工作,index.html 的整个结构用于question.html,除了你覆盖的东西。

如果您希望索引默认包含一些内容,您可以在 content 块内添加代码。如有必要,它将被任何子模板替换,但当您仅加载 index.html 时,它仍然可见。


如果您真的想在index.html 中插入一些东西,请查看include tag。这允许跨网页重复使用网站的公共部分。但是您不会在您计划包含的任何模板中扩展基本模板。

【讨论】:

    【解决方案2】:

    只需像这样删除标记块中的空格:

    改变这个:

    { % block content % }
    

    到这里:

    {% block content %}
    

    与其他标签块类似。

    【讨论】:

    • @shriakhilc 现在工作了吗?
    • 不工作.. 谢谢你
    • 错误是什么?
    • 没有发现错误,但左侧有一个小符号/标记 {% block content %}。它说:在继承者中被覆盖
    • 什么是 inhenritos ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 2015-03-21
    • 2020-02-04
    • 1970-01-01
    相关资源
    最近更新 更多