Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 20, 2018 18:04:57

Pugna
Зарегистрирован: 2015-12-13
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка кодировки шаблона?

Добрый день, друзья

Прохожу урок по ссылке:
https://habr.com/post/346340/
Мой код:
\app\routes.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from flask import render_template
from app import app

@app.route('/')
@app.route('/index')
def index():
user = {'username': 'Эльдар Рязанов'}
posts = [
{
'author': {'username': 'John'},
'body': 'Beautiful day in Portland!'
},
{
'author': {'username': 'Susan'},
'body': 'The Avengers movie was so cool!'
},
{
'author': {'username': 'Ипполит'},
'body': 'Какая гадость эта ваша заливная рыба!!'
}
]
return render_template('index.html', title='Home', user=user, posts=posts)
Запускаю веб-сервер и ….
quant@N73:~/microblog$ source venv/bin/activate
(venv) quant@N73:~/microblog$ export FLASK_APP=microblog.py
(venv) quant@N73:~/microblog$ export FLASK_DEBUG=1
(venv) quant@N73:~/microblog$ flask run
* Serving Flask app "microblog.py" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 195-778-260
и вижу, проходя по ссылке, это:
UnicodeDecodeError

UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)
Traceback (most recent call last)

File "/home/quant/.local/lib/python2.7/site-packages/flask/app.py", line 2309, in __call__

return self.wsgi_app(environ, start_response)

File "/home/quant/.local/lib/python2.7/site-packages/flask/app.py", line 2295, in wsgi_app

response = self.handle_exception(e)

File "/home/quant/.local/lib/python2.7/site-packages/flask/app.py", line 1741, in handle_exception

reraise(exc_type, exc_value, tb)

File "/home/quant/.local/lib/python2.7/site-packages/flask/app.py", line 2292, in wsgi_app

response = self.full_dispatch_request()

File "/home/quant/.local/lib/python2.7/site-packages/flask/app.py", line 1815, in full_dispatch_request

rv = self.handle_user_exception(e)

File "/home/quant/.local/lib/python2.7/site-packages/flask/app.py", line 1718, in handle_user_exception

reraise(exc_type, exc_value, tb)

File "/home/quant/.local/lib/python2.7/site-packages/flask/app.py", line 1813, in full_dispatch_request

rv = self.dispatch_request()

File "/home/quant/.local/lib/python2.7/site-packages/flask/app.py", line 1799, in dispatch_request

return self.view_functions[rule.endpoint](**req.view_args)

File "/home/quant/microblog/app/routes.py", line 34, in index

return render_template('index.html', title='Home', user=user, posts=posts)

File "/home/quant/.local/lib/python2.7/site-packages/flask/templating.py", line 135, in render_template

context, ctx.app)

File "/home/quant/.local/lib/python2.7/site-packages/flask/templating.py", line 117, in _render

rv = template.render(context)

File "/home/quant/.local/lib/python2.7/site-packages/jinja2/environment.py", line 1008, in render

return self.environment.handle_exception(exc_info, True)

File "/home/quant/.local/lib/python2.7/site-packages/jinja2/environment.py", line 780, in handle_exception

reraise(exc_type, exc_value, tb)

File "/home/quant/microblog/app/templates/index.html", line 12, in top-level template code

<h1>Hello, {{ user.username }}!</h1>

UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)
Что можно сделать? использую Python3.6. Исключаю кирилицу из файла, и ошибки нет, но в чем дело?
Пробовал:
quant@N73:~/microblog$ source venv/bin/activate
(venv) quant@N73:~/microblog$ alias python=python3
(venv) quant@N73:~/microblog$ python -V
Python 3.6.5
непомогло

Попробовал Добавить эти строчки в начало кода:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
помогло, но как убрать эти костыли?))

Отредактировано Pugna (Авг. 20, 2018 18:19:35)

Офлайн

#2 Авг. 21, 2018 00:43:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Ошибка кодировки шаблона?

Поставь flask для третьего питона. Что там второй питон делает вообще? Он вообще не нужен для flask'а.

Pugna
  
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
В третьем питоне кодировка и так utf-8. Во втором питоне ascii была, поэтому требовалось всегда ставить объявление кодировки.



Отредактировано py.user.next (Авг. 21, 2018 00:46:28)

Офлайн

#3 Авг. 21, 2018 17:26:08

Pugna
Зарегистрирован: 2015-12-13
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка кодировки шаблона?

py.user.next
Поставь flask для третьего питона. Что там второй питон делает вообще? Он вообще не нужен для flask'а.
Ок, поставил, но всё тоже самое происходит, делал так:

quant@N73:~$ python -V
Python 2.7.15rc1
quant@N73:~$ pip uninstall flask
quant@N73:~$ alias python=python3
quant@N73:~$ python -V
Python 3.6.5
quant@N73:~$ pip install flask==0.12.2

Что следует сделать?

Офлайн

#4 Авг. 21, 2018 18:13:06

Pugna
Зарегистрирован: 2015-12-13
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка кодировки шаблона?

Прошу прощения, я ставил пакеты не в то окружение)
решение было:

quant@N73:~$ python3
Python 3.6.5 (default, Apr 1 2018, 05:46:30)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.executable)
/usr/bin/python2.7
PYTHONPATH=/usr/local/bin/python3.6
Python 3.6.5 (default, Apr 1 2018, 05:46:30)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.executable)
/usr/bin/python3
quant@N73:~$ pip3 install flask==0.12.2

Проблема решена

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version