u
ubomj29 ноября 2019 г. 13: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
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
11

Добрый день.

Вам нужно написать шаблонный тег, который будет проверять наличие искомого якоря. Можете проверять просто окончание строки в 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 ноября 2019 г. 16:13

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

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

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

{% 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 ноября 2019 г. 16:42

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

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

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

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

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

u
  • 29 ноября 2019 г. 17:16
  • (ред.)

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)


так, 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 ноября 2019 г. 18:07

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

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

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

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

/content/?identificator=blablabla

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Timeweb

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Посмотреть Хостинг
VD

C++ - Тест 001. Первая программа и типы данных

  • Результат:73баллов,
  • Очки рейтинга1
Ds

C++ - Тест 003. Условия и циклы

  • Результат:64баллов,
  • Очки рейтинга-1
o

C++ - Тест 001. Первая программа и типы данных

  • Результат:86баллов,
  • Очки рейтинга6
Последние комментарии
D:

QML - Урок 016. База данных SQLite и работа с ней в QML Qt

Добрый день, пытаюсь разобраться и подргнать пример под себя. Есть бд с огромным количеством полей. В приложении на виджетах при использовании QTableView все работает и путем простого sql запрос…

Django - Урок 039. Добавление личных сообщений и чатов на сайте - Часть 2 (Счётчик диалогов и чатов с непрочитанными сообщениями)

Добавляйте поле файла в модель сообщения. И в форме сообщения указывайте, что поле с файлом.
s

Django - Урок 023. Like Dislike система с помощью GenericForeignKey

все, я со всем разобрался!) Извините!)
s

Django - Урок 023. Like Dislike система с помощью GenericForeignKey

Доброго времени суток!) Я случайно набрел на вашу статью, и она помогла мне решить некоторые мои трудности, я прошел за вами по шагам, в попытках адаптировать это под себя, и возник вопрос. У ва…
Сейчас обсуждают на форуме
МЛ

Наследование QWidget

Добрый день. Имеется некий класс W наследуемый от QWidget, на нем несколько кнопок и QTable. Создаю новый класс который наследует QDialog и W. При вызове этого диалогового окна оно пустое. …
М

QML: изменение стиля при наведении и при нажатии на кнопку

enabled = false перестанет быть активной и не будет ни на что реагировать) Хм.. по-моему пробовал такое. Проверю ещё раз после работы. Ура, спасибо большо…
U

Динамическое наполнение StackView QML

Во затупил))) Спасибо за все))) StackView.push("ModuleTip1.qml") ну или в сложной иерархии StackView.push("qrc:/folder/ModuleTip1.qml") и всего делов... Не пойму, почему сра…

QEventLoop тормозит при удалении экземпляра

Думаю, что нет. Лучше вообще без исключений, но не всегда возможно.
s

Ключевое слово class

Разобрался,на стаковерфлоу нашел топик и понял почему так происходило .
О нас
Услуги
© EVILEG 2015-2020
Рекомендует хостинг TIMEWEB