u
ubomj29. November 2019 02:52

Замена картинки при появлении #якоря в адресной строке

Привет всем!
Не могу решить задачку))
Надо сделать замену картинки когда в адресной страке появляется якорь (hash)
Стандартный адрес: site.ru/content/
Адрес с якорем: site.ru/content/#blablabla

{% if что то там == '#blablabla' %}
<meta property="og:image" content="Картинка когда якорь в url" />
{% else %}
<meta property="og:image" content="Стандартная картинка" />
{% endif %}

Попробовал через request.path, но что то не выходит.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

11
Evgenii Legotckoi
  • 29. November 2019 04:51
  • (bearbeitet)

Добрый день.

Вам нужно написать шаблонный тег, который будет проверять наличие искомого якоря. Можете проверять просто окончание строки в url

Для того, чтобы написать свой шаблонный тег нужно добваить каталог templatetags, в котором будет файл init .py и файл с названием вашей библиотеки тегов, обычно я называе его также, как приложение в котором находятся данные теги

Такая будет структура

  • my_app/
    • templatetags/
      • init .py
      • my_app.py

my_app.py

from django import template

register = template.Library()

@register.filter(is_safe=False)
def endswith(value, suffix):
    return value.endswith(suffix)

А потом используем его в шаблоне

{% load endswith from my_app %}
{% if request.url|endswith:'#blablabla' %}
  <meta property="og:image" content="Картинка когда якорь в url" />
{% else %}
  <meta property="og:image" content="Стандартная картинка" />
{% endif %}
    u
    • 29. November 2019 05:13

    Server Error (500)
    Что то не заводится((

      Evgenii Legotckoi
      • 29. November 2019 05:14

      Server Error (500) - мне это ничего не говорит. у вас может быть там какая угодно ошибка. трейсбек давайте

        Evgenii Legotckoi
        • 29. November 2019 05:15
        • (bearbeitet)

        либо ещё перепишите так

        {% load endswith from my_app %}
        {% if request.path|endswith:'#blablabla' %}
          <meta property="og:image" content="Картинка когда якорь в url" />
        {% else %}
          <meta property="og:image" content="Стандартная картинка" />
        {% endif %}
        

        Я прям сразу так не помню, что там, url или path

          u
          • 29. November 2019 05:42

          если request.path, то ничего не меняется
          а если request.url, то 'NoneType' object has no attribute 'endswith'

            Evgenii Legotckoi
            • 29. November 2019 05:46

            А как вы вообще рендерите шаблон? у вас request попадает в контекст шаблона? покажите код view

              Evgenii Legotckoi
              • 29. November 2019 05:49

              и ещё перепишите так

              @register.filter(is_safe=False)
              def endswith(value, suffix):
                  print(value, suffix)
                  return value.endswith(suffix)
              

              А потом покажите мне выхлоп print

                u
                • 29. November 2019 06:16
                • (bearbeitet)

                None #blablabla

                from django.views.generic import TemplateView
                from .models import Section
                from .models import Article
                #from django.core.paginator import Paginator
                from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
                from django.shortcuts import render
                from django.shortcuts import redirect
                from django.shortcuts import get_object_or_404
                
                
                
                
                from django.utils import timezone
                from django.db.models import Sum
                
                
                
                # Create your views here.
                class Index(TemplateView):
                    def get(self, request, *args, **kwargs):
                        context = {}
                        context['new'] = Article.objects.order_by('-updated')[:10]
                        return render(request, 'index.html', context=context)
                
                
                class SectionView(TemplateView):
                    def get(self, request, *args, **kwargs):
                        section = get_object_or_404(Section, slug=self.kwargs['section_url'])
                        context = {}
                
                        context['section'] = section
                        return render(request, 'section.html', context=context)
                
                
                
                class ArticleView(TemplateView):
                    def get(self, request, *args, **kwargs):
                        article = get_object_or_404(Article, slug=self.kwargs['section_url'])
                        context = {}
                
                        context['article'] = article
                
                        context['related'] = Article.objects.filter(section_id=article.section_id).exclude(id=article.id)[:5]
                
                        return render(request, 'article.html', context=context)
                
                
                
                  Evgenii Legotckoi
                  • 29. November 2019 06:20
                  • (bearbeitet)

                  так, request должен в щаблоне присутствовать, контекст там должен нормально формироваться

                  None #blablabla

                  А это для request.url?

                  Совсем не помню, в каком случае якоря присуствуют при path

                  Попробуйте в шаблоне так прописать

                  {% load endswith from my_app %}
                  {% if request.get_full_path|endswith:'#blablabla' %}
                    <meta property="og:image" content="Картинка когда якорь в url" />
                  {% else %}
                    <meta property="og:image" content="Стандартная картинка" />
                  {% endif %}
                  
                    u
                    • 29. November 2019 07:07

                    Если request.get_full_path, то принт выводит /content/ #blablabla, причем #blablabla не который в адресной строке, а который вот тут {% if request.get_full_path|endswith:'#blablabla' %} - так и должно?

                    request.url выводит None #blablabla
                    request.path тоже выводит /content/ #blablabla

                      Evgenii Legotckoi
                      • 1. Dezember 2019 12:29
                      • (bearbeitet)

                      Я очень сильно извиняюсь. Я ошибся по поводу якорей и знака #

                      Дело в том, что часть url с данным знаком вообще не посылается браузером в строну сервера, если вы хотите иметь какой-то идентификатор, то вам нужно посылать url примерно в следующем виде

                      /content/?identificator=blablabla

                        Kommentare

                        Nur autorisierte Benutzer können Kommentare posten.
                        Bitte Anmelden oder Registrieren
                        Letzte Kommentare
                        A
                        ALO1ZE19. Oktober 2024 08:19
                        Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                        ИМ
                        Игорь Максимов5. Oktober 2024 07:51
                        Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                        d
                        dblas55. Juli 2024 11:02
                        QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                        k
                        kmssr8. Februar 2024 18:43
                        Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                        Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                        Jetzt im Forum diskutieren
                        J
                        JacobFib17. Oktober 2024 03:27
                        добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
                        JW
                        Jhon Wick1. Oktober 2024 15:52
                        Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
                        КГ
                        Кирилл Гусарев27. September 2024 09:09
                        Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
                        F
                        Fynjy22. Juli 2024 04:15
                        при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

                        Folgen Sie uns in sozialen Netzwerken