Форум сайта python.su
Если я просматриваю пост в нужной категории, кнопка видна, если нет - нет.
В jinja можно прописать условный оператор.
А как обратиться к категории?
Офлайн
Приведи код шаблона и код страницы, которая по этому шаблону получается в браузере.
Офлайн
Код страницы, просто её исходный код?
Шаблон:
{% if post.pk %} <div class="playpause d-flex"> <div class="anyContainer"> <span style="font-size:90%" class="text-black text-center">audio</span> <input type="checkbox" value="None" id="playpause" name="check" checked/> <label for="playpause" tabindex=1></label> </div> <a href="{% url 'render_pdf_new' post.pk %}" class='ms-4'> <?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns="http://www.w3.org/2000/svg" width="50" height="60" viewBox="0 0 75.320129 92.604164"> <g transform="translate(53.548057 -183.975276) scale(1.4843)"> <path fill="#ff2116" d="M-29.632812 123.94727c-3.551967 0-6.44336 2.89347-6.44336 6.44531v49.49804c0 3.55185 2.891393 6.44532 6.44336 6.44532H8.2167969c3.5519661 0 6.4433591-2.89335 6.4433591-6.44532v-40.70117s.101353-1.19181-.416015-2.35156c-.484969-1.08711-1.275391-1.84375-1.275391-1.84375a1.0584391 1.0584391 0 0 0-.0059-.008l-9.3906254-9.21094a1.0584391 1.0584391 0 0 0-.015625-.0156s-.8017392-.76344-1.9902344-1.27344c-1.39939552-.6005-2.8417968-.53711-2.8417968-.53711l.021484-.002z" color="#000" font-family="sans-serif" overflow="visible" paint-order="markers fill stroke" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;solid-opacity:1"/> <path fill="#f5f5f5" d="M-29.632812 126.06445h28.3789058a1.0584391 1.0584391 0 0 0 .021484 0s1.13480448.011 1.96484378.36719c.79889772.34282 1.36536982.86176 1.36914062.86524.0000125.00001.00391.004.00391.004l9.3671868 9.18945s.564354.59582.837891 1.20899c.220779.49491.234375 1.40039.234375 1.40039a1.0584391 1.0584391 0 0 0-.002.0449v40.74609c0 2.41592-1.910258 4.32813-4.3261717 4.32813H-29.632812c-2.415914 0-4.326172-1.91209-4.326172-4.32813v-49.49804c0-2.41603 1.910258-4.32813 4.326172-4.32813z" color="#000" font-family="sans-serif" overflow="visible" paint-order="markers fill stroke" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;solid-opacity:1"/> <path fill="#ff2116" d="M-23.40766 161.09299c-1.45669-1.45669.11934-3.45839 4.39648-5.58397l2.69124-1.33743 1.04845-2.29399c.57665-1.26169 1.43729-3.32036 1.91254-4.5748l.8641-2.28082-.59546-1.68793c-.73217-2.07547-.99326-5.19438-.52872-6.31588.62923-1.51909 2.69029-1.36323 3.50626.26515.63727 1.27176.57212 3.57488-.18329 6.47946l-.6193 2.38125.5455.92604c.30003.50932 1.1764 1.71867 1.9475 2.68743l1.44924 1.80272 1.8033728-.23533c5.72900399-.74758 7.6912472.523 7.6912472 2.34476 0 2.29921-4.4984914 2.48899-8.2760865-.16423-.8499666-.59698-1.4336605-1.19001-1.4336605-1.19001s-2.3665326.48178-3.531704.79583c-1.202707.32417-1.80274.52719-3.564509 1.12186 0 0-.61814.89767-1.02094 1.55026-1.49858 2.4279-3.24833 4.43998-4.49793 5.1723-1.3991.81993-2.86584.87582-3.60433.13733zm2.28605-.81668c.81883-.50607 2.47616-2.46625 3.62341-4.28553l.46449-.73658-2.11497 1.06339c-3.26655 1.64239-4.76093 3.19033-3.98386 4.12664.43653.52598.95874.48237 2.01093-.16792zm21.21809-5.95578c.80089-.56097.68463-1.69142-.22082-2.1472-.70466-.35471-1.2726074-.42759-3.1031574-.40057-1.1249.0767-2.9337647.3034-3.2403347.37237 0 0 .993716.68678 1.434896.93922.58731.33544 2.0145161.95811 3.0565161 1.27706 1.02785.31461 1.6224.28144 2.0729-.0409zm-8.53152-3.54594c-.4847-.50952-1.30889-1.57296-1.83152-2.3632-.68353-.89643-1.02629-1.52887-1.02629-1.52887s-.4996 1.60694-.90948 2.57394l-1.27876 3.16076-.37075.71695s1.971043-.64627 2.97389-.90822c1.0621668-.27744 3.21787-.70134 3.21787-.70134zm-2.74938-11.02573c.12363-1.0375.1761-2.07346-.15724-2.59587-.9246-1.01077-2.04057-.16787-1.85154 2.23517.0636.8084.26443 2.19033.53292 3.04209l.48817 1.54863.34358-1.16638c.18897-.64151.47882-2.02015.64411-3.06364z"/> <path fill="#2c2c2c" d="M-20.930423 167.83862h2.364986q1.133514 0 1.840213.2169.706698.20991 1.189489.9446.482795.72769.482795 1.75625 0 .94459-.391832 1.6233-.391833.67871-1.056548.97958-.65772.30087-2.02913.30087h-.818651v3.72941h-1.581322zm1.581322 1.22447v3.33058h.783664q1.049552 0 1.44838-.39184.405826-.39183.405826-1.27345 0-.65772-.265887-1.06355-.265884-.41282-.587747-.50378-.314866-.098-1.000572-.098zm5.50664-1.22447h2.148082q1.560333 0 2.4909318.55276.9375993.55276 1.4133973 1.6443.482791 1.09153.482791 2.42096 0 1.3994-.4338151 2.49793-.4268149 1.09153-1.3154348 1.76324-.8816233.67172-2.5189212.67172h-2.267031zm1.581326 1.26645v7.018h.657715q1.378411 0 2.001144-.9516.6227329-.95858.6227329-2.5539 0-3.5125-2.6238769-3.5125zm6.4722254-1.26645h5.30372941v1.26645H-4.2075842v2.85478h2.9807225v1.26646h-2.9807225v4.16322h-1.5813254z" font-family="Franklin Gothic Medium Cond" letter-spacing="0" style="line-height:125%;-inkscape-font-specification:'Franklin Gothic Medium Cond'" word-spacing="4.26000023"/> </g> </svg> </a> </div> {% endif %}
def post_detail(request, post_slug): post = get_object_or_404(Story, slug=post_slug) comments = post.comments.filter(active=True) if request.method == 'POST': comment_form = CommentForm(data=request.POST) if comment_form.is_valid(): new_comment = comment_form.save(commit=False) new_comment.post = post new_comment.save() else: comment_form = CommentForm() return render(request, 'pages/story_detail.html', {'post': post, 'comments': comments, 'comment_form': comment_form})
class Story(models.Model): title = models.CharField(max_length=255, verbose_name='Заголовок') slug = models.SlugField(max_length=255, unique=True, db_index=True, verbose_name='URL') content = models.TextField(blank=True, verbose_name='Содержание') cover = models.ImageField(blank=True, upload_to='photos/%Y/%m', verbose_name='Обложка') time_create = models.DateTimeField(default=timezone.now(), null=False, verbose_name='Время создания') time_update = models.DateTimeField(auto_now=True) is_published = models.BooleanField(default=True, verbose_name='Опубликовано') cat = models.ForeignKey('Category', on_delete=models.PROTECT, verbose_name='Категория')
Офлайн
CentnerКод страницы, которая получается в браузере после прохождения через Jinja-шаблон.
Код страницы, просто её исходный код?
def post_detail(request, post_slug): post = get_object_or_404(Story, slug=post_slug) return repr(dir(post))
Офлайн
Ок, вот сама страница, думаю так будет проще: https://hplove.ru/story/hrebty-bezumiya/
Кнопки по стрелке, генерят pdf и аудио рассказа.
Но они должны быть только в категории “рассказы”.
Для игр и фильмов (другие категории), они, соответственно не нужны.
Поэтому я и хочу добавить такую проверку.
Прикреплённый файлы:
Screenshot_3.png (585,4 KБ)
Офлайн
py.user.next
И скинь сюда.
Прикреплённый файлы:
Screenshot_2.png (57,7 KБ)
Офлайн
Вот такую выполни
def post_detail(request, post_slug): post = get_object_or_404(Story, slug=post_slug) raise ValueError('x' + repr(dir(post)) + 'x') return None
CentnerКак у тебя различаются страница с рассказом и страница с фильмом? Там даже в ссылке оно показывает story везде. При открытии описания фильма, там должна быть ссылка со словом film.
Ок, вот сама страница, думаю так будет проще: https://hplove.ru/story/hrebty-bezumiya/
return render(request, 'pages/story_detail.html', {'post': post, 'post_type': 'story', 'comments': comments, 'comment_form': comment_form})
Отредактировано py.user.next (Март 27, 2023 13:40:11)
Офлайн
Спасибо за помощь.
Никак, честно говоря.
На этапе планирования БД, мне было достаточно, что это будут условно посты разбитые по категориям - текст и картинка.
Нюансы, как обычно, вылезли позже.
Если post_type делать, то менять БД и миграции?
Прикреплённый файлы:
Screenshot_4.png (161,8 KБ)
Офлайн
CentnerКроме класса Story должен быть ещё и класс Film и все остальные абстракции, которые есть сейчас и которые могут появиться потом. При появлении какого-то понятия код должен быть просто дополнен классом для этого понятия и в коде всё должно подцепиться само и включить это понятие во множество других понятий. То есть для этого код надо написать изначально так. А у тебя он, видимо, на коленке сделан. Поэтому у тебя и истории и фильмы - это одно и то же. А сейчас их надо различить, а ты их различить не можешь.
Если post_type делать, то менять БД и миграции?
def post_detail(request, post_slug): post = get_object_or_404(Story, slug=post_slug) raise ValueError('x' + repr(dir(post.cat)) + '|' + repr(dir(post.cat_id)) + 'x') return None
Офлайн
Согласен. Я только учусь. Надо было сразу продумать все, но это уже приходит с опытом.
Я просто раньше работал со smarty.
Там такая проблема решается проще, условно:
{if $action == 'category' && $category.id == 1}
Код кнопки
{/if}
Прикреплённый файлы:
Screenshot_2.png (191,1 KБ)
Офлайн