Не совсем уверен, почему это происходит, но я получаю следующую ошибку. Все, что я пытаюсь сделать, это отображать даты и время из моей базы данных. Когда я удаляю ('%I:%M %p')
из strftime
, все работает нормально, но, очевидно, даты / время больше не отображаются. Не уверен, что идет не так, или что я скучаю. ТИА.
jinja2.exceptions.UndefinedError
jinja2.exceptions.UndefinedError: 'None' has no attribute 'strftime'
Traceback (most recent call last)
File "/Users/brandoncarr/.local/share/virtualenvs/BlueSkyAdmin-PG_RBAa1/lib/python3.7/site-packages/flask/app.py", line 2463, in __call__
return self.wsgi_app(environ, start_response)
File "/Users/brandoncarr/.local/share/virtualenvs/BlueSkyAdmin-PG_RBAa1/lib/python3.7/site-packages/flask/app.py", line 2449, in wsgi_app
response = self.handle_exception(e)
File "/Users/brandoncarr/.local/share/virtualenvs/BlueSkyAdmin-PG_RBAa1/lib/python3.7/site-packages/flask/app.py", line 1866, in handle_exception
reraise(exc_type, exc_value, tb)
File "/Users/brandoncarr/.local/share/virtualenvs/BlueSkyAdmin-PG_RBAa1/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/Users/brandoncarr/.local/share/virtualenvs/BlueSkyAdmin-PG_RBAa1/lib/python3.7/site-packages/flask/app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "/Users/brandoncarr/.local/share/virtualenvs/BlueSkyAdmin-PG_RBAa1/lib/python3.7/site-packages/flask/app.py", line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/brandoncarr/.local/share/virtualenvs/BlueSkyAdmin-PG_RBAa1/lib/python3.7/site-packages/flask/app.py", line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/brandoncarr/.local/share/virtualenvs/BlueSkyAdmin-PG_RBAa1/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/Users/brandoncarr/.local/share/virtualenvs/BlueSkyAdmin-PG_RBAa1/lib/python3.7/site-packages/flask/app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/brandoncarr/.local/share/virtualenvs/BlueSkyAdmin-PG_RBAa1/lib/python3.7/site-packages/flask/app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/brandoncarr/.local/share/virtualenvs/BlueSkyAdmin-PG_RBAa1/lib/python3.7/site-packages/flask_login/utils.py", line 272, in decorated_view
return func(*args, **kwargs)
File "/Users/brandoncarr/Desktop/BlueSkyAdmin/app/routes.py", line 81, in view_tour
return render_template('view-tour.html', title='View Tour', tour=tour, user=user)
File "/Users/brandoncarr/.local/share/virtualenvs/BlueSkyAdmin-PG_RBAa1/lib/python3.7/site-packages/flask/templating.py", line 140, in render_template
ctx.app,
File "/Users/brandoncarr/.local/share/virtualenvs/BlueSkyAdmin-PG_RBAa1/lib/python3.7/site-packages/flask/templating.py", line 120, in _render
rv = template.render(context)
File "/Users/brandoncarr/.local/share/virtualenvs/BlueSkyAdmin-PG_RBAa1/lib/python3.7/site-packages/jinja2/environment.py", line 1090, in render
self.environment.handle_exception()
File "/Users/brandoncarr/.local/share/virtualenvs/BlueSkyAdmin-PG_RBAa1/lib/python3.7/site-packages/jinja2/environment.py", line 832, in handle_exception
reraise(*rewrite_traceback_stack(source=source))
File "/Users/brandoncarr/.local/share/virtualenvs/BlueSkyAdmin-PG_RBAa1/lib/python3.7/site-packages/jinja2/_compat.py", line 28, in reraise
raise value.with_traceback(tb)
File "/Users/brandoncarr/Desktop/BlueSkyAdmin/app/templates/view-tour.html", line 1, in top-level template code
{% extends "base.html" %}
File "/Users/brandoncarr/Desktop/BlueSkyAdmin/app/templates/base.html", line 383, in top-level template code
{% block base %}{% endblock %}
File "/Users/brandoncarr/Desktop/BlueSkyAdmin/app/templates/view-tour.html", line 143, in block "base"
<p style="bottom: 0;">Created by <strong>{{ tour.author.first_name }} {{ tour.author.last_name }}</strong> at {{ tour.timestamp.strftime('%I:%M %p') }}</p>
models.py:
class Tours(db.Model):
id = db.Column(db.Integer, primary_key=True)
customer_fname = db.Column(db.String(50))
customer_lname = db.Column(db.String(50))
customer_phone = db.Column(db.String(140))
partner_fname = db.Column(db.String(100))
partner_lname = db.Column(db.String(100))
partner_phone = db.Column(db.String(100))
region = db.Column(db.String(140))
tour_date = db.Column(db.DateTime())
tour_time = db.Column(db.DateTime())
gift = db.Column(db.String())
timestamp = db.Column(db.DateTime())
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
def __init__(self):
return '<Tours {}>'.format(self.customer_fname, self.customer_lname, self.customer_phone,
self.partner_fname, self.partner_lname, self.partner_phone, self.region, self.tour_date,
self.tour_time, self.gift, self.timestamp)
forms.py:
class RegistrationForm(FlaskForm):
first_name = StringField('First Name', validators=[DataRequired()])
last_name = StringField('Last Name', validators=[DataRequired()])
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired()])
password_repeat = PasswordField(
'Repeat Password', validators=[DataRequired(), EqualTo('password')])
submit = SubmitField('Register Now')
def validate_username(self, username):
user = User.query.filter_by(username=username.data).first()
if user is not None:
raise ValidationError('Please use a different username.')
def validate_email(self, email):
user = User.query.filter_by(email=email.data).first()
if user is not None:
raise ValidationError('Please use a different email address.')
class ToursForm(FlaskForm):
customer_fname = StringField('Customer First Name', validators=[DataRequired()])
customer_lname = StringField('Customer Last Name', validators=[DataRequired()])
customer_phone = StringField('Phone Number', validators=[DataRequired()])
partner_fname = StringField('Partner First Name', validators=[DataRequired()])
partner_lname = StringField('Partner Last Name', validators=[DataRequired()])
partner_phone = StringField('Phone Number', validators=[DataRequired()])
tour_date = DateField('Tour Date', format='%m-%d-%yyyy')
tour_time = DateTimeField('Tour Time', format='%I:%M %p')
gift = SelectField('Gift Selected', choices=[('Cruise', 'Cruise'), ('Hotel Suite', 'Hotel Suite'), ('Airfare', 'Airfare'), ('Safari', 'Safari')])
region = SelectField('Region', choices=[('Select Region', 'Select Region'), ('Oceanside', 'Oceanside'), ('Scottsdale', 'Scottsdale'), ('Granite Bay', 'Granite Bay'), ('Laguna Hills', 'Laguna Hills')])
submit = SubmitField('Add Tour')
rout.py:
@app.route('/tours/<int:id>/view')
@login_required
def view_tour(id):
form = RegistrationForm()
tour = Tours.query.get_or_404(id)
user = User(first_name=form.first_name.data, last_name=form.last_name.data,
email=form.email.data)
return render_template('view-tour.html', title='View Tour', tour=tour, user=user)
Код из моего HTML файла выкидывает ошибку:
{{ tour.timestamp.strftime('%I:%M %p') }}
Еще раз спасибо!
ОБНОВЛЕНИЕ:
Похоже, мои модели пропустили default=datetime.utcnow
на tour_time и timestamp. Я забыл перенести мою базу данных после их удаления. Все снова заработало.