我正在用flask构建一个简单的订阅webapp;
我在index.html中有一个链接,用于使用url_for()
的条款和条件页面
如果我试图直接访问该页,但由于以下错误,miain页未加载,则视图功能正常:
我尝试使用一个普通的a href链接,但没有url\u,但效果不好:/
jinja2.exceptions.UndefinedError: 'terms' is undefined
Traceback (most recent call last)
File "C:\Users\Mahmoud\.virtualenvs\subscribe_form-Eu2W50ez\lib\site-packages\flask\app.py", line 2463, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\Mahmoud\.virtualenvs\subscribe_form-Eu2W50ez\lib\site-packages\flask\app.py", line 2449, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\Mahmoud\.virtualenvs\subscribe_form-Eu2W50ez\lib\site-packages\flask\app.py", line 1866, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\Mahmoud\.virtualenvs\subscribe_form-Eu2W50ez\lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\Mahmoud\.virtualenvs\subscribe_form-Eu2W50ez\lib\site-packages\flask\app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\Mahmoud\.virtualenvs\subscribe_form-Eu2W50ez\lib\site-packages\flask\app.py", line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\Mahmoud\.virtualenvs\subscribe_form-Eu2W50ez\lib\site-packages\flask\app.py", line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\Mahmoud\.virtualenvs\subscribe_form-Eu2W50ez\lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\Mahmoud\.virtualenvs\subscribe_form-Eu2W50ez\lib\site-packages\flask\app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\Mahmoud\.virtualenvs\subscribe_form-Eu2W50ez\lib\site-packages\flask\app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Users\Mahmoud\Desktop\subscribe form\app.py", line 45, in index
return render_template('index.html' )
File "C:\Users\Mahmoud\.virtualenvs\subscribe_form-Eu2W50ez\lib\site-packages\flask\templating.py", line 140, in render_template
ctx.app,
File "C:\Users\Mahmoud\.virtualenvs\subscribe_form-Eu2W50ez\lib\site-packages\flask\templating.py", line 120, in _render
rv = template.render(context)
File "C:\Users\Mahmoud\.virtualenvs\subscribe_form-Eu2W50ez\lib\site-packages\jinja2\asyncsupport.py", line 76, in render
return original_render(self, *args, **kwargs)
File "C:\Users\Mahmoud\.virtualenvs\subscribe_form-Eu2W50ez\lib\site-packages\jinja2\environment.py", line 1008, in render
return self.environment.handle_exception(exc_info, True)
File "C:\Users\Mahmoud\.virtualenvs\subscribe_form-Eu2W50ez\lib\site-packages\jinja2\environment.py", line 780, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\Mahmoud\.virtualenvs\subscribe_form-Eu2W50ez\lib\site-packages\jinja2\_compat.py", line 37, in reraise
raise value.with_traceback(tb)
File "C:\Users\Mahmoud\Desktop\subscribe form\templates\index.html", line 53, in top-level template code
<a href= {{url_for(terms)}} class="terms_link">شروط المسابقة</a> <br>
File "C:\Users\Mahmoud\.virtualenvs\subscribe_form-Eu2W50ez\lib\site-packages\flask\helpers.py", line 318, in url_for
if endpoint[:1] == ".":
jinja2.exceptions.UndefinedError: 'terms' is undefined
我的剧本:
from flask import Flask, render_template, request, url_for
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
ENV = 'prod'
if ENV == 'dev':
app.debug = True
app.config['SQLALCHEMY_DATABASE_URI'] = ''
else:
app.debug = True
app.config['SQLALCHEMY_DATABASE_URI'] = ''
app.config['SQLALCHEM_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
class SeaSalt(db.Model):
__tablename__ = 'seasalt'
id = db.Column(db.Integer , primary_key = True)
customer = db.Column(db.String(50))
age = db.Column(db.Integer)
birth_date = db.Column(db.Date)
city = db.Column(db.String(50))
mobile = db.Column(db.String(50), unique=True)
email = db.Column(db.String(200), unique = True)
job = db.Column(db.String(200))
work_place = db.Column(db.String(200))
def __init__(self, customer, age, birth_date, city, mobile, email, job, work_place):
self.customer = customer
self.age = age
self.birth_date = birth_date
self.city = city
self.mobile = mobile
self.email = email
self.job = job
self.work_place = work_place
@app.route('/')
def index():
return render_template('index.html' )
@app.route('/terms')
def terms():
return render_template('/terms.html')
@app.route('/submit', methods=['POST'])
def submit():
if request.method == 'POST':
customer = request.form['customer']
age = request.form['age']
birth_date = request.form['birth_date']
city = request.form['city']
mobile = request.form['mobile']
email = request.form['email']
job = request.form['job']
work_place = request.form['work_place']
if customer == '' or age == '' or mobile == '' or email =='':
return render_template('index.html', message = 'من فضلك قم بادخال البيانات كاملة ')
if db.session.query(SeaSalt).filter(SeaSalt.email == email).count() == 0 or db.session.query(SeaSalt).filter(SeaSalt.mobile == mobile).count() ==0:
data = SeaSalt(customer, age, birth_date, city, mobile, email, job, work_place)
db.session.add(data)
db.session.commit()
registerd = data.id
return render_template('success.html' , customer = customer , registerd = registerd) #success.html
return render_template('index.html', message = 'البريد الالكتروني/ رقم الهاتف مسجل من قبل ')
if __name__ == "__main__":
app.run()
索引.html
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="../static/style.css">
<title>Sea Salt Challange</title>
</head>
<body>
<header>
<p> #ثلجها_وسكراتش_بيثلجك #سي_سولت_سكراتش #تحدي_سكراتش </p>
</header>
<div >
{% if message: %}
<p class="message">{{ message }}</p>
{% endif %} <br>
</div>
<div class="from-group" >
<form action="/submit" method="POST" class="form-container" >
<div>
<input type="text" name="customer" placeholder="الأسم">
</div>
<div >
<input type="text" name='age' placeholder="السن">
</div>
<div>
<input placeholder="تاريخ الميلاد" type="text" onfocus="(this.type='date')" onblur="(this.type='text')" name= 'birth_date'>
<!-- <input type="date" name='birth_date' placeholder="تاريخ الميلاد"> -->
</div>
<div>
<input type="text" name="city" placeholder="المدينة">
</div>
<div>
<input type="text" name="mobile" placeholder="رقم الجوال">
</div>
<div>
<input type="email" name="email" placeholder="البريد الالكتروني">
</div>
<div>
<input type="text" name="job" placeholder="المهنة">
</div>
<div>
<input type="text" name="work_place" placeholder="محل العمل">
</div>
<a href= {{url_for(terms)}} class="terms_link">شروط المسابقة</a> <br>
<input type="submit" value="اشترك في التحدي">
</div>
</form>
</body>
</html>
url_for
的第一个参数是端点的名称。因此需要先注册端点试试看
相关问题 更多 >
编程相关推荐