使用 Django 模板设置默认值

Posted

技术标签:

【中文标题】使用 Django 模板设置默认值【英文标题】:Using Django templates to set default values 【发布时间】:2013-06-11 06:05:42 【问题描述】:

所以,我正在创建一个搜索功能,我希望在呈现搜索结果时,之前输入的查询保留在搜索框中。目前,我这样做的方式是发送一个 POST 请求,获取查询并将其作为变量发送回模板。但是由于某种原因,它只适用于查询的第一个单词,并且所有后续单词都会被删除。当我在

中呈现相同的变量时

标签,但它的出现正如我所期望的那样。有什么我做的不太对吗?

<div id="searchwrapper">
    <form action="/search" method="post"> % csrf_token %
        % if old_query %
        <input type="text" class="searchbox" name="s" value=old_query />
        % else %
        <input type="text" class="searchbox" name="s" value="" />
        % endif %
        <input type="image" src="static/images/search-icon.svg" class="searchbox_submit" value="" />
    </form>
</div>


def search(request):
    context = 
    context.update((csrf(request)))
    results_string = ""
    if request.POST:
        results_string = find(request)
        old_query = request.POST['s']
        context.update("old_query": old_query)
    search_bar = render_to_string("search.html", Context(context))
return HttpResponse(search_bar + results_string)

我不认为 find 方法是相关的,但如果您认为它有用,请告诉我,我可以发布它。模板是“search.html”的相关部分 就像我说的,如果我将行 &lt;p&gt; old_query &lt;/p&gt; 添加到 % if old_query % 部分,则会显示正确的值,但目前如果我使用像 hello ***! 这样的查询我只会将“hello”作为搜索字段的值。

这可能有点傻,但我对 web 开发还很陌生,所以任何帮助都非常感谢。

【问题讨论】:

你为什么不使用 django 表单?它会为您节省很多工作 就像我说的,我对 webdev 还很陌生,我非常重视在进入库之前深入了解幕后发生的事情。稍后我可能会切换到 django 形式,但这让我非常清楚内部的阴谋。 【参考方案1】:

修复此行以将 old_query 包裹在引号之间:

<input type="text" class="searchbox" name="s" value="old_query" />

这应该给你整个搜索而不是第一个单词。

【讨论】:

哦,太棒了!我是否正确假设这就像 shell/perl 中的变量一样工作? var 表示法的作用是输出对象__unicode____repr__ 方法。其余的是普通的 html,所以你需要引号 :)

以上是关于使用 Django 模板设置默认值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 django 在模板中显示默认值?

Django 1.8 设置存在更新表单的默认值

使用 Django,如何在模板中动态设置 ModelForm 字段值?

Django DetailView模板默认字段值不起作用

django形式:默认初始值

如何在 Django 上将 True 设置为 BooleanField 的默认值?