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将变量传递给模板的主要内容,如果未能解决你的问题,请参考以下文章