Django将变量传递给模板

Posted

技术标签:

【中文标题】Django将变量传递给模板【英文标题】:Django pass variable into template 【发布时间】:2019-04-03 02:24:35 【问题描述】:

你好,谢谢你的帮助,我的编码很差。

指出:我正在做一个将数据从数据库传递到前端的 Django 项目;但现在我什至无法将 Django 的任何视图传递到模板中,我怀疑我传递了错误的变量类型;请评论你的想法。

这是我在 views.py 上的代码:

from django.shortcuts import render

def index (requset):
    return render(requset,'myapp/index.html') # link to be able open frountend

def testdex(requset):
    text = "hello world"
    context ='mytext' : text 
    return render(requset,'myapp/inculdes.html', context)

所以我的变量将被传递到延伸到索引页面的 inculdes

这是我在 inculdes.html 中的代码:

% exntends "myapp/index.html" %

% block includes %
 mytext 
% endblock includes %

这是我在 index.html 上的代码:

<body>
% block includes % % endblock includes %    
</body>

再次感谢您给我时间来帮助我,如果可以给我写一些代码,我将不胜感激,因为尝试整周修复这个问题

【问题讨论】:

分享你的myapp/index.html 它应该是extends,而不是exntends 确保调试为真。然后,当您犯任何错误时,它会显示详细的错误,而不是只显示 500 页。 对不起,由于我的 wifi 错误,我输入了密码;但除此之外,页面工作得很好,但什么也不显示 嗨,有没有办法可以打印出变量,或者调试它? 【参考方案1】:

你可以试试这样的

views.py

from django.template.response import TemplateResponse

def testdex(requset, template_name="myapp/inculdes.html"):
    args = 
    text = "hello world"
    args['mytext'] = text
    return TemplateResponse(request, template_name, args)

inculdes.html

% extends "myapp/index.html" %
% block includes %
 mytext 
% endblock includes %

并确保您已在 settings.py

中设置模板路径

【讨论】:

我试过了;它没有用,但这与我的代码正确接受相同的是使用模板响应;我不确定你能解释一下吗?【参考方案2】:

当您执行% block content %% endblock content % 时,您是在告诉 Django 您希望能够覆盖此部分。请注意,单词 content 可以是任何反映您想要覆盖的内容。

当您执行 variable 时,您是在告诉 Django 您想要传递一个上下文。在此示例中,我要传递的变量称为 Title 作为键,Portfolio 作为值。上下文是您在 views.py 中传递的字典,如下所示:

def portfolio_home(request):
    return render(request, 'portfolio/work.html', 'title': 'Portfolio')

假设我想将上下文(或变量)传递到我的基本模板中。在此示例中,我想在基本模板的 head 部分的标题标签中传递标题。

base.html 的 html 文件中,您需要有这样的内容:

<!DOCTYPE html>
<html lang="en">

% load staticfiles %

    <head>
        <title> title </title>
        ...........
    </head>
</html>

在我的项目和其他应用程序的 urls.py 中,我想将标题传递给它,我应该像这样创建视图:

def portfolio_home(request):
    return render(request, 'portfolio/work.html', 'title': 'Portfolio')

【讨论】:

Django 有什么理由希望它通过字典而不是关键字参数传递?【参考方案3】:

我发现了为什么 Django 不能将变量传递给 HTML,因为;

我的应用程序 url 没有在视图中激活函数/模型

对于这么简单的错误,我感到很尴尬。

我需要做的就是将此代码添加到我的应用程序网址中

urlpatterns = [
path('', views.timedex, name='timedex'), #need add this 
path('', views.index, name='index'),
]

【讨论】:

【参考方案4】:

在 % endblock includes % 之前添加 block.super

【讨论】:

我试过了还是不行,到底是什么block.super? block.super 在原始内容之后添加您的内容而不是覆盖它,请分享您的 urls.py。 谢谢 Gad,这是 urls.py 代码; from django.contrib import admin from django.urls import include, path urlpatterns = [ path(r'^admin/$', admin.site.urls), path('', include('myapp.urls'), name = 'myapp'), ]

以上是关于Django将变量传递给模板的主要内容,如果未能解决你的问题,请参考以下文章

Django:不能将变量传递给包含的模板?

如何将变量传递给自定义 Django 模板加载器?

有没有办法将变量传递给 Django 中的“扩展”模板?

将 django 模板变量传递给 js 数据表

django:如何将模板变量传递给 javascript onclick 例程?

Django 3:创建 CRUD 表模板(将上下文变量传递给 HTML)