【问题标题】:Django show render_to_response in templateDjango 在模板中显示 render_to_response
【发布时间】:2012-03-01 08:01:36
【问题描述】:

您好,提前谢谢您。

我知道这完全是菜鸟问题,我已经在各种论坛中搜索并阅读并重新阅读了文档,所以请温柔。

我有一个看法:

#views.py

from django.shortcuts import render_to_response
from django.shortcuts import render
from django.http import HttpResponse, HttpRequest, HttpResponseRedirect
from acme.acmetest.models import Player
from acme.acmetest.models import PickForm

def playerAdd(request, id=None):
    form = PickForm(request.POST or None,
                       instance=id and Player.objects.get(id=id))

    # Save new/edited pick
    if request.method == 'POST' and form.is_valid():
        form.save()
        return HttpResponseRedirect('/draft/')

    #return render_to_response('makepick.html', {'form':form})
    return render(request, 'makepick.html', {'form':form})

def draftShow(request):
    draft_list = ['1', 'hello', 'test', 'foo', 'bar']
    #draft_list = Player.objects.all()
    #return render_to_response('makepick.html', {'draft_list' :draft_list}, context_instance=RequestContext(request))
    return render_to_response('makepick.html', {'draft_list' :draft_list})

我正在尝试让它呈现到模板 .html 页面:

#makepick.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML lang="en">
<head>
    <title>Pick</title>
</head>
<body>

    <form method="POST" action="">
        {% csrf_token %}
        <table>{{ form }}</table>
        <input type="submit" value="Draft Player" 
    </form><br /><br /> 

Your picks so far:<br />
{% for draft in draft_list %}
    {{ draft.playernumber }}
{% endfor %}

</body>
</HTML>

其中 playernumber 是 models.py 中模型类“Player”中的字段。

#urls.py

from django.conf.urls.defaults import patterns, include, url
from acme.acmetest import views


urlpatterns = patterns('',
    ('^$', 'acme.acmetest.views.playerAdd'),
)

感谢您的帮助!

dp

【问题讨论】:

  • 我得到了 HTML 页面,并且其他 django 代码在其上正确呈现,但是我现在正在编写的区域中得到的只是“到目前为止你的选择:”然后什么都没有。我希望它显示来自草案列表/模型的球员编号列表。
  • 我无法在您的代码 ATM 中发现任何错误;尝试调试它,例如通过简单的打印语句(例如 print draft_list 在它进入模板之前)。

标签: python django views render-to-response


【解决方案1】:

确保makepick.hmtl 位于您的应用程序templates 目录或您的TEMPLATE_DIR 中。

您可以检查您的视图以验证 Player.objects.all() 是否确实返回了某些内容。确保 playernumber 是 Player 对象的实际属性。

【讨论】:

  • makepick.html 在 TEMPLATE_DIR 中。我在同一页面上有一个正确呈现的表单。如何检查我的视图以查看 Player.objects.all() 是否正在返回某些内容? playernumber 是我的 models.py 中 Player 对象的一个​​属性
【解决方案2】:

嗯,看起来您的模板渲染得很好。所以你必须看看draft_list 是否真的包含任何东西,以及playernumber 是什么被抓取的每个对象。

在项目的根目录下,运行:

python manage.py shell

现在您在 shell 中,测试您的数据库中是否真的有任何 Player 对象,并查看每个对象的 playernumber 属性返回什么:

from acme.acmetest.models import Player
draft_list = Player.objects.all()
for draft in draft_list:
    print draft.playernumber

【讨论】:

  • @U-DON 谢谢...这是结果:codedraft_list 中的草稿:>>>draft_list 中的草稿:...打印 draft.playernumber ... 23 21 24 174 1234 999 code
  • 有点像在黑暗中拍摄,但请尝试修改您的视图以拥有这条线:return render_to_response('makepick.html', {'draft_list' :draft_list}, context_instance=RequestContext(request))
  • 如果做不到这一点,你能看看如果你使用另一个列表,但具有任意值,并在模板中循环遍历它会发生什么?
  • 我刚刚尝试过,结果相同...def draftShow(request): draft_list = ['1', 'hello', 'test', 'foo', 'bar'] return render_to_response('makepick.html', {'draft_list' :draft_list}) 我想知道我输入同一个 html 模板的另一个视图是否有问题。我有一个使用return HttpResponseRedirect('/draft/') 来返回响应的表单。请注意,/draft/ 实际上调用了与我们开始时相同的页面,但值得一提...
  • 除了render_to_response,还有其他选择吗?我真正想做的就是显示数据库中列出的项目,这些项目将在每次更新表时更新。还是HTML页面for loop的问题?
猜你喜欢
  • 2015-10-25
  • 2015-10-29
  • 2019-12-22
  • 2014-04-23
  • 2019-09-20
  • 2020-05-05
  • 2019-08-07
  • 1970-01-01
相关资源
最近更新 更多