Проверьте, есть ли электронная почта в ListField EmailField внутри шаблона jinja2.Python

Программы на Python
Ответить
Anonymous
 Проверьте, есть ли электронная почта в ListField EmailField внутри шаблона jinja2.

Сообщение Anonymous »

Контекст:
У меня есть следующий класс:

Код: Выделить всё

class DisplayArtwork(Document):
name = StringField(required=True)
email = EmailField(required=True)
country = StringField(required=True)
phone = StringField()
artname = StringField(required=True)
medium = StringField(required=True)
caption = StringField(required=True)
filename = StringField(required=True)
votes = ListField(EmailField())
published = DateTimeField(required=True)
Затем я отправляю DisplayArtwork.objects в шаблон flask/jinja2 следующим образом:

Код: Выделить всё

@app.route("/gallery")
def gallery():
return render_template("gallery.html", artworks=DisplayArtwork.objects)
Внутри шаблона находится цикл for, который перебирает все объекты DisplayArtwork: {% for art in arts %}
Мой вопрос: могу ли я проверить, является ли адрес электронной почты текущего пользователя (

Код: Выделить всё

current_user.get_id()
) находится внутри ListField(EmailField())?
Что я пробовал:
Во-первых, я проверяю, аутентифицирован ли текущий пользователь, затем проверяю, определено ли произведение искусства['votes'][current_user.get_id()].

Код: Выделить всё

{% if current_user.is_authenticated %}
{% if artwork['votes'][current_user.get_id()] is defined%}
Upvotes: {{artwork['votes']|length}}
{% else %}
Upvotes: {{artwork['votes']|length}}
{% endif %}
{% else %}
[url=/login]Login to Upvote[/url]
{% endif %}
Функция upvote() работает следующим образом:

Код: Выделить всё

function upvote(filename) {
const formData = new FormData();
formData.append('filename', filename);
fetch('/upvote', {
method: 'post',
body: formData
});
upvotebutton = document.getElementById(filename);
if (!upvotebutton) {alert('Error: ${filename} button not found');}
if (upvotebutton.classList.contains('btn-outline-success')) {
upvotebutton.classList.remove('btn-outline-success');
upvotebutton.classList.add('btn-success');
upvotebutton.innerHTML = 'Upvotes: ' + (parseInt(upvotebutton.innerHTML.split(' ')[1]) + 1);
}
else if (upvotebutton.classList.contains('btn-success')) {
upvotebutton.classList.remove('btn-success');
upvotebutton.classList.add('btn-outline-success');
upvotebutton.innerHTML = 'Upvotes: ' + (parseInt(upvotebutton.innerHTML.split(' ')[1]) - 1);
}

}
Затем это обрабатывается этой функцией на серверной стороне:

Код: Выделить всё

@app.route("/upvote", methods=["POST"])
def upvote():
if current_user.is_authenticated:
artwork = DisplayArtwork.objects(filename=request.form["filename"])
if artwork:
response = None
try:
artwork.update(pull__votes=current_user.get_id())
response = "downvoted"
except KeyError:
artwork.update(add_to_set__votes=[current_user.get_id()])
response = "upvoted"
return response, 200
return "Failed to upvote", 500
return "Login to upvote", 401
К сожалению, это всегда показывает, что пользователь не проголосовал за.
Как заставить работать функцию голосования?

Подробнее здесь: https://stackoverflow.com/questions/792 ... 2-template
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»