Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.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 金甲2号表格包括韩元';行不通_Python_Html_Forms_Flask_Jinja2 - Fatal编程技术网

Python 金甲2号表格包括韩元';行不通

Python 金甲2号表格包括韩元';行不通,python,html,forms,flask,jinja2,Python,Html,Forms,Flask,Jinja2,我正在用烧瓶和金杯做我的第一步。我已经浏览了一些示例,但现在我尝试集成flask安全性,但遇到了一些问题 我尝试用一个登录表单构建一个模式,因此我设置了一个div,如下所示: <div class="modal"> <h3>Login</h3> <form action="{{ url_for_security('login') }}" method="POST" name="login_user_form"> {{ login_user_

我正在用烧瓶和金杯做我的第一步。我已经浏览了一些示例,但现在我尝试集成flask安全性,但遇到了一些问题

我尝试用一个登录表单构建一个模式,因此我设置了一个div,如下所示:

<div class="modal">
<h3>Login</h3>
<form action="{{ url_for_security('login') }}" method="POST" name="login_user_form">
    {{ login_user_form.hidden_tag() }}
    {{ render_field_with_errors(login_user_form.email) }}
    {{ render_field_with_errors(login_user_form.password) }}
    {{ render_field_with_errors(login_user_form.remember) }}
    {{ render_field(login_user_form.next) }}
    {{ render_field(login_user_form.submit) }}
</form>
from flask.ext.security import LoginForm, RegisterForm
...
@app.context_processor
def inject_userForms():
    return dict(login_user_form=LoginForm(), register_user_form=RegisterForm() )
并试图在layout.html中通过

{% block loginModal %}{% endblock %}
现在我了解到这不是一种方式,因为内容是呈现的,layout.html只被调用

现在,我试图通过include语句将代码直接放入layout.html,但由于这不起作用,我直接将其放入

我还补充说

{% from "security/_macros.html" import render_field_with_errors, render_field %}
在第一行中,它们是flask安全包提供的宏。但我得到的只是一个错误:

UndefinedError: 'login_user_form' is undefined (after a long traceback)
我完全被困在这里,在网站上阅读jinja2文档已经有一个小时了。我怎样才能使这张表格生效

更新(很抱歉,更新太晚):

My layout.html,它实现了所有页面的基本布局

<!doctype html>
<html>
<head>
  <title>MyExample</title>
  <link rel=stylesheet type=text/css href="{{ url_for('static', filename='css/style.css') }}">
  <link rel=stylesheet type=text/css href="{{ url_for('static', filename='css/gumby.css') }}">
</head>
<body>
  <div class=page>
    <nav id="navbar-main-nav" class="navbar">
      <div class="row">
      <a class="toggle" gumby-trigger="#navbar-main-nav #main-nav" href="#"><i class="icon-menu"></i></a>
      <h1 class="four columns logo"><a href="/">Logo</a></h1>
      <nav class="five columns pull_right">
        <ul id="main-nav">
          <li><a href="/link1/"><span>Link1 </span></a></li>
          <li><a href="/link2/"><span>Link2</span><i class="icon-cog" title="Customize"></i></a></li>
    {% if current_user.is_authenticated() %}
    <li>Hello {{ current_user.name }}</li>
    <li><a href="{{ url_for('security.logout') }}">Logout</a></li>
    {% else %}
    <li><a href="#" class="switch" gumby-trigger="#modal1">Open Modal</a></li>
    <li><a href="{{ url_for('security.register') }}">Register</a></li>
    {% endif %}
    </ul>
  </nav>
    </div>
  </nav>

  <div class="modal" id="modal1">
    <div class="content">
      <a class="close switch" gumby-trigger="|#modal1"><i class="icon-cancel" /></i></a>
        <div class="row">
          <div class="ten columns centered">
            <div class="row">
              <div class="five columns">
                {% block loginModal %}{% endblock %}
              </div>
              <div class="five columns">
                 <!-- register Form -->
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>

    {% block body %}{% endblock %}
  </div>
  <script src="{{ url_for('static', filename='js/libs/modernizr-2.6.2.min.js') }}"></script>
  <script src="{{ url_for('static', filename='js/libs/jquery-2.0.2.min.js') }}"></script>
  <script gumby-touch="js/libs/" src="{{ url_for('static', filename='js/libs/gumby.min.js') }}"></script>

</body>
</html>
我将表单直接添加到layout.html中,现在效果很好。根本不起作用的是包含块。如果我使用blockception,即在内容块中使用login块,它就会起作用

您的错误是:

UndefinedError:“登录\用户\表单”未定义

这是来自模板,看起来像这样

{% extends layout.html %}
{% block loginModal %}
{% from "security/_macros.html" import render_field_with_errors, render_field %}
{% include "security/_messages.html" %}

   <h3>Login</h3>
   <form action="{{ url_for_security('login') }}" method="POST" name="login_user_form">
      {{ login_user_form.hidden_tag() }}
      {{ render_field_with_errors(login_user_form.email) }}
      {{ render_field_with_errors(login_user_form.password) }}
      {{ render_field_with_errors(login_user_form.remember) }}
      {{ render_field(login_user_form.next) }}
      {{ render_field(login_user_form.submit) }}
  </form>
{% endblock %}
如果没有将“login\u user\u form”作为参数传递给render\u模板,则会出现错误


如果您希望在应用程序的其他地方(如a中)的模板上下文中定义
login\u user\u form
,那么请确保应用程序的该部分确实正常工作。

您所说的“现在我了解的不是这样,因为内容是呈现的,layout.html只是调用的”是什么意思?就我而言,你提供的方式将是正确的做事方式。也许您可以提供您尝试如何使用此方法的完整来源?另外,您的表单HTML中似乎缺少一个结束元素
,不确定这是否是导致问题的原因。因此layout.HTML(通常称为base.HTML)构建了我的线框。并且有一个{%block body%}{%endblock%}然后呈现内容。我还有一个index.html来呈现主体。我在谷歌上搜索了很多东西,发现了几个条目,它们说如果一个块应该呈现,它必须在呈现的模板中,在本例中是index.html,而不是layout.html/base.html。我试着举一个较长的例子。我理解这一点,但我想说的是,我认为您在设置layout.html和使用layout.html的模板时可能会有一些错误。你说你是如何改变你在问题中提供的文件的,但是我们没有看到你修改的实际结果,我们不确定你是否真的做了正确的修改。请修改问题以向我们提供模板的版本(layout.html和子模板),然后是它正在输出的html。最后,告诉我们你希望它输出什么。我用一个例子编辑了原始文章。我希望输出的是layout.html中的登录表单,在每个页面上都可以使用model进行登录或注册。当我读到这篇文章时,我发现我忘记了信息,在更新的示例中,表单没有呈现出任何错误。我已经更新了我原来的帖子。通过再次阅读:你是对的,但是我在哪里可以实现基本html的这个视图呢。由于我从未直接调用它以通过路由进行渲染,所以我不知道如何实现渲染的未路由实现。实际上,这对我帮助很大,因为它似乎是实现可重用小部件的关键信息。我仍然不理解你的问题。归根结底,你可以把Jinja使用的
extends
block
看作是将多个模板组合成一个大模板的简单方法。然后,它将使用模板上下文来计算诸如
login\u user\u form
之类的内容。无论您尝试在
layout.html
中使用
login\u user\u表单
,还是在
login.html
页面中使用,
login\u user\u表单
仍然需要在上下文中。您可以使用参数
render_template
,或者使用模板上下文处理器(正如我在回答中链接到的那样)。此外,在这个问题和Flask的bug报告中,您讨论了
base.html
layout.html
。你确定没有混淆它们吗?所以你是对的:我阅读了有关模板上下文处理器的链接文档。我还发现,flask security提供了基本表单,如登录表单作为导入:
from flask.ext.security LoginForm
,然后我可以在这样的上下文处理器中使用它
@app.context\u processor def inject\u userForms():return dict(login\u user\u form=LoginForm())
from flask.ext.security import LoginForm, RegisterForm
...
@app.context_processor
def inject_userForms():
    return dict(login_user_form=LoginForm(), register_user_form=RegisterForm() )
{% extends layout.html %}
{% block loginModal %}
{% from "security/_macros.html" import render_field_with_errors, render_field %}
{% include "security/_messages.html" %}

   <h3>Login</h3>
   <form action="{{ url_for_security('login') }}" method="POST" name="login_user_form">
      {{ login_user_form.hidden_tag() }}
      {{ render_field_with_errors(login_user_form.email) }}
      {{ render_field_with_errors(login_user_form.password) }}
      {{ render_field_with_errors(login_user_form.remember) }}
      {{ render_field(login_user_form.next) }}
      {{ render_field(login_user_form.submit) }}
  </form>
{% endblock %}
def my_view():
    # ...
    return render_template('login.html', login_user_form=login_user_form)