Форум сайта python.su
Попробуй использовать post.cat_id для различия категорий.
Сначала вставь такой код
def post_detail(request, post_slug): post = get_object_or_404(Story, slug=post_slug) raise ValueError('x' + str(post.cat_id) + 'x') return None
CentnerНу, в Jinja можно всё это делать и даже больше. Просто у тебя архитектура неправильная у всего проекта. Jinja'е нечего просто проверять, так как ты неразличимые топики сделал. У тебя фильм - это история, а история - это фильм. Чем они отличаются? Ничем они не отличаются. Вот сейчас нужно нарушать правило инкапсуляции из ООП и лезть во внутреннюю структуру этого топика, которая по правилу инкапсуляции из ООП должна быть неизвестна никому, кроме топика самого. Это вот к тебе подошёл бы человек и спросил тебя “как ты себя чувствуешь?”, ты бы сказал ему “хорошо” и всё. А в случае нарушения инкапсуляции он бы подошёл, разрезрал бы тебе грудь и стал бы сердце ощупывать, бьётся ли оно у тебя и правильный ли у него ритм, и потом даже зашил бы грудь обратно и реанимировал тебя. Ты был бы живой, но это неправильный способ определения здоровья и хорошего настроения, несмотря даже на то, что этот человек врач и знает, как это всё делать. Поэтому снаружи должно быть видно, что это, чтобы внутрь лезть не надо было. А у тебя этого нет. Поэтому ты теперь костыли пытаешься эти найти.
Мне казалось что в Jinja можно как-то так-же.
Отредактировано py.user.next (Март 28, 2023 23:59:00)
Онлайн
Проверил, категории разные конечно, и id разные.
Я конечно сделал проверку такого типа:
{% if post.cat_id == 1 %}
Офлайн
CentnerОни должны быть ещё константными. То есть они должны быть разными и они при разных запусках программы должны быть ещё и одними и теми же. Потому что они при разных запусках могут ставиться произвольно, и ты просто просто зашьёшь число какое-то в шаблон, а там будет потом другое число для этой же категории. При этом они все будут разные для разных категорий. Так что это тоже надо проверить.
категории разные конечно, и id разные
{% if category_name == 'story' %}
Отредактировано py.user.next (Март 30, 2023 03:51:53)
Онлайн
Спасибо большое.
py.user.next
Они должны быть ещё константными. То есть они должны быть разными и они при разных запусках программы должны быть ещё и одними и теми же. Потому что они при разных запусках могут ставиться произвольно, и ты просто просто зашьёшь число какое-то в шаблон, а там будет потом другое число для этой же категории. При этом они все будут разные для разных категорий. Так что это тоже надо проверить.
Офлайн
Centner
Но ведь используется БД, id присваивается автоматически и не меняется при каждом обращении.
CentnerТам используется не БД, а ORM, СУБД, БД и таблицы в этой БД. Как ORM может поменяться, так и СУБД может поменяться, так и БД может поменяться, так и таблицы в этой БД могут поменяться. И при каждом из этих изменений могут поменяться идентификаторы. Поэтому если эти идентификаторы напрямую будут проходить в шаблон Jinja, то при их изменении такой шаблон сломается, потому что числа будут не те в шаблоне стоять. И когда у тебя десять тысяч шаблонов таких, то они сломаются все. Хорошо ещё, если они тебе напишут, что они сломались, а могут вообще начать тихо показывать всякую ложную хрень. Поэтому мы шаблоны отвязываем от этих чисел, а сами эти числа сводим в одну точку, где при любых изменениях идентификаторов мы эти числа в этой одной точке все переписываем один раз и всё (скриптом).
Или речь о том что если кто-то другой будет заполнять БД, он может в другой последовательности заполнить категории и код работать не будет?
Отредактировано py.user.next (Март 30, 2023 23:18:57)
Онлайн
Вообщем, решил по твоему совету, начать другой проект, более сложный, но с правильным подходом, изначально.
Бьюсь над выводом форм. Стандартный вывод не подходит по верстке.
У меня вывод идет почему то двумя циклами, и v.value ничего не выводит.
{% for field in rate %} {% for v in field %} <input name="rating" id="{{ v.id_for_label }}" value="{{ v.value }}"> <label for="{{ v.id_for_label }}"></label> {% endfor %} {% endfor %}
class RateForm(forms.ModelForm): rating = forms.CharField(widget=forms.RadioSelect(choices=TYPE_SELECT)) class Meta: model = Rating fields = ("rating",) labels = { 'rating': '', }
Офлайн
CentnerДа тебе надо на простых потренироваться сначала. Поделай простые проекты, вдруг ты их тоже не сможешь сделать. Главное, своё вот это теоретическое мнение о себе (о своих способностях) проверить на практике. Если теория и практика сходятся, то можно продолжать тренироваться на этом уровне для закрепления и прочистки навыков и потихоньку повышать уровень. А если же ты теоретически думаешь о себе, что ты мастер, а на практике оказывается, что ты не можешь смастерить то, в чём был уверен до этой практики, то тебе надо снизить планку для начала, откатиться на уровень ниже. Всё равно никто не будет тебя считать умным, если ты будешь типа умные программы писать, которые работают только понарошку или наполовину или на три четверти. Никто.
Вообщем, решил по твоему совету, начать другой проект, более сложный
CentnerТут я наблюдаю какие-то усложнения в шаблоне. А в шаблоне не должно быть вообще ничего сложного. Скорее всего, ты просто ответственность кода на питоне возложил на код на языке шаблонизатора. То есть то, что ты должен был проделать в коде, который работает до шаблона ещё, перенёс в шаблон и теперь даже отладить это не можешь.
У меня вывод идет почему то двумя циклами, и v.value ничего не выводит.
CentnerДа похрен. Так ты искать будешь этот баг то здесь, то там, а он может быть вообще где-нибудь в скрытом неожиданном месте, в рояле, например. Так что займись отладкой пошаговой на промежуточных тестовых данных, которые якобы вычислены были.
Это форма для рейтинга через radioselect:
Отредактировано py.user.next (Апрель 30, 2023 04:16:10)
Онлайн