Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 是否有一种方法可以对所有模板使用一个表单?_Python 3.x_Flask - Fatal编程技术网

Python 3.x 是否有一种方法可以对所有模板使用一个表单?

Python 3.x 是否有一种方法可以对所有模板使用一个表单?,python-3.x,flask,Python 3.x,Flask,我一直在尝试使用flask在我的导航栏中创建这个搜索功能,它可以在我的站点的所有页面中使用 我需要将其添加到我的布局模板,该模板扩展到所有其他模板。是否有一种更简单的方法可以做到这一点,而不必通过每一条路线并将此表单添加到其中?现在它只是给了我一个错误,因为我的所有其他路线都无法识别表单 如果我不得不把这个特定的搜索表单添加到我的所有路线中,这看起来真的很乏味 我的导航栏搜索功能如下所示: <form method="POST" action="

我一直在尝试使用flask在我的导航栏中创建这个搜索功能,它可以在我的站点的所有页面中使用

我需要将其添加到我的布局模板,该模板扩展到所有其他模板。是否有一种更简单的方法可以做到这一点,而不必通过每一条路线并将此表单添加到其中?现在它只是给了我一个错误,因为我的所有其他路线都无法识别表单

如果我不得不把这个特定的搜索表单添加到我的所有路线中,这看起来真的很乏味

我的导航栏搜索功能如下所示:

        <form method="POST" action="{{ url_for('main.searchresults', search=searchq) }}" enctype="multipart/form-data">
              <div class="md-form active-cyan active-cyan-2">
                  <a class="md-form active-cyan active-cyan-2" type="text" placeholder="Search" aria-label="Search">{{ searchbar.search }}</a>

              </div>
        </form>
                  <a class="ml-2" href="{{ url_for('main.searchresults', search=searchq) }}">{{ searchbar.submit(class="btn btn-outline-primary") }}</a>



我可以通过在我的所有路线中添加我使用的烧瓶表单(定义为搜索栏)来解决这个问题,但我希望(并假设)有一种更简单的方法来实现这一点,因为它看起来非常低效。

如果你在模板中使用jinja,你可以创建一个文件(例如
包含/_navbar.html
)用于导航栏,并将其包含在模板中

{% include 'includes/_navbar.html' %}
您通常有一些“基本”HTML文件,所有其他文件都从中继承/包含。例如:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>My website</title>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    </head>
    <body>
        {% include 'includes/_navbar.html' %}

        <div class="container">
            {% block body %}{% endblock %}
        </div>


        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    </body>
</html>

我的网站
{%include'包含/_navbar.html%}
{%block body%}{%endblock%}
然后,对于所有模板,扩展此基础模板。比如说

{% extends 'base.html' %}

{% block body %}

    <div class="jumbotron text-center">
        <img src="../static/logo.png" alt="Logo" width="160" height="120">
        {% if session.get('logged_in') %}
            <h1>Welcome {{ session.user.username }}!</h1>
        {% else %}
            <h1>Welcome to My website!</h1>
        {% endif %}
    </div>

{% endblock %}
{%extends'base.html%}
{%block body%}
{%if session.get('logged_in')%}
欢迎{{session.user.username}}!
{%else%}
欢迎来到我的网站!
{%endif%}
{%endblock%}

那么includes/\u navbar.html的内容本身就是navbar吗?我有一个基本的html页面,但我会尝试将导航栏从中分离出来并使用include@il5amees是的,应该是它自己。我有一个示例程序,是该项目中的导航栏。都是模板。您的示例确实有意义,但是我在导航栏中使用了{{form.}},所以当您导出或使用include时,会出现错误jinja2.exceptions.UndefinedError:“searchbar”未定义。对不起,我应该说清楚我想做什么。我会马上编辑我的帖子。@il5amees哦,对了,我想我读你的问题有点太匆忙了。因此,您的问题是,您不想转到所有路由(在python文件中)并添加参数
form
?不幸的是,你不得不这么做,但是可以用函数来包装它。我明白了,无论如何,谢谢。从中了解了“包含”功能。希望有一种方法可以做到这一点,稍后有人可以指出。