Имеется проблема. Оформляю админ панель, страница делится на две части.
В левой - селект с юзернеймами
<select class="custom-select">
{% for element in userlist %}
<option value='{{ url_for("admin", user=element) }}' {% if user==element %}selected{% endif %} onclick='location=value'>{{ element }}</option>
{% endfor %}
</select>
В правой части селект с записями юзера
<select class="custom-select">
{% for item in content_list %}
<option value='{{ url_for("admin", user=user, ID=item["id"]) }}' {% if item.get('id')==curelem %}selected{% endif %} onclick='location=value'>{{ item["name"] }}</option>
{% endfor %}
</select>
На вход подается
userlist - список вида ['Grigorij', 'Anatoliy', 'Ktougodno']
content_list - список со словарями [{'id':id, 'name':name, 'etc':etc}, {'id':id, 'name':name, 'etc':etc}]
curelem - id текущего выбранного элемента, который получаю с запросом из аргумента ID, а затем передаю его в рендер шаблона так render_template('admin.html', userlist=userlist, content_list=content_list, curelem=request.args.get('ID'))
Так вот, второй селект, который с контентом, выбирает selected'ом все время первый элемент при том, что опытным путем было выяснено, что item["id"] у каждой опции верный, curelem все время имеет верное значение, при нажатии на опцию происходит переход туда, куда надо, то есть внешне вроде бы все работает как и должно, но селект ведет себя как то необычно.
Тест части вашего шаблона с Jinja2:
from jinja2 import Template
template_html = '''
<select class="custom-select">
{% for item in content_list %}
<option value='{{ url_for("admin", user=user, ID=item["id"]) }}' {% if item.get('id')==curelem %}selected{% endif %} onclick='location=value'>{{ item["name"] }}</option>
{% endfor %}
</select>
'''
template = Template(template_html)
params = {
'content_list': [
{'id': 368469, 'name': 'kliff', 'etc': 'welcome to ruSO!'},
{'id': 198251, 'name': 'aiv', 'etc': '..respondent..'},
],
'url_for': lambda x, user, ID: 'https://ru.stackoverflow.com/users/{}'.format(ID),
'curelem': 198251,
}
print(template.render(**params))
Даёт правильный результат с опцией selected в нужном месте:
<select class="custom-select">
<option value='https://ru.stackoverflow.com/users/368469' onclick='location=value'>kliff</option>
<option value='https://ru.stackoverflow.com/users/198251' selected onclick='location=value'>aiv</option>
</select>
Советы:
curelem число в виде строки, а в словаре в виде int или наоборот – при беглом просмотре легко упустить эту важную деталь.curelem в параметры шаблона? К счастью или сожалению, это не считается ошибкой, отсутствующий параметр будет подставляться как None.И ещё, использовать имена вида curelem и element в одном пространстве имён для разных типов данных очень нехорошо. Лучше длинные, но внятные имена вроде current_user_id, selected_menu_id и т.п.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости