Django产品详情页跳转正常但页面无内容显示问题求助
兄弟,我看了你贴的代码,后端逻辑其实没毛病——终端能打出product.title,说明视图确实拿到了产品数据,也成功把上下文传给模板了。问题肯定出在模板文件本身,我给你列几个最可能的排查点,你挨个检查下:
检查模板文件的路径与名称
确认detail-products.html是不是放在正确的位置:应该是在你的Django项目里products/templates/products/这个目录下(因为你的app名叫products)。如果路径不对或者文件名拼写错误(比如少写了个s、大小写不对),Django可能会渲染空模板,刚好对应你现在页面无内容的情况。检查模板里的变量调用是否正确
终端能拿到product.title,那你得确保模板里确实用对了变量:- 是不是把变量名写错了?比如模板里写成了
{{ product.name }}但你的模型字段是title; - 是不是根本没在模板里引用
product变量?比如模板里只有空的HTML结构,没写像<h1>{{ product.title }}</h1>、<p>{{ product.description }}</p>这样的代码; - 还要注意Django模板变量是大小写敏感的,别把
product写成Product或者products(复数)。
- 是不是把变量名写错了?比如模板里写成了
检查模板的继承与块引用
如果detail-products.html是继承自某个基础模板(比如base.html),那你得确认是不是用了正确的块标签来包裹内容。比如基础模板里有{% block content %}{% endblock %},但你在详情页模板里没把产品相关代码放到{% block content %}和{% endblock %}之间,这样渲染的时候基础模板的空块会覆盖你的内容,页面自然就空了。额外提个小优化(非当前问题原因)
你视图里的参数名是post,但实际上传的是产品的slug,建议把参数名改成slug更直观,避免自己后续混淆:def product_detail(request, slug): product = get_object_or_404(ProductModel, slug=slug) print(product.title) return render(request, 'products/detail-products.html', { 'product': product, })对应的urls.py里的路径不需要改,只要视图参数名和查询里的
slug=参数名对应上就行。
如果上面的排查点都没问题,你可以把detail-products.html的代码贴出来,我再帮你找问题~
备注:内容来源于stack exchange,提问作者Ярослав Селиванов

