u
Nov. 29, 2019, 2:52 a.m.

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

Привет всем!
Не могу решить задачку))
Надо сделать замену картинки когда в адресной страке появляется якорь (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, но что то не выходит.

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
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
  • Nov. 29, 2019, 5:13 a.m.

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
  • Nov. 29, 2019, 5:42 a.m.

если 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
  • Nov. 29, 2019, 6:16 a.m.
  • (edited)

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
  • Nov. 29, 2019, 7:07 a.m.

Если 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

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Donate

Hello, Dear Users of EVILEG!!!

If the site helped you, then support the development of the site financially, please.

You can do it by following ways:

Thank you, Evgenii Legotckoi

SB
Dec. 5, 2019, 8:01 a.m.
Sergej Bederin

C++ - Test 001. The first program and data types

  • Result:60points,
  • Rating points-1
AS
Dec. 4, 2019, 6:39 a.m.
Artur Salmin

C++ - Test 005. Structures and Classes

  • Result:33points,
  • Rating points-10
ST
Dec. 2, 2019, 4:05 p.m.
Sergej Timchenko

Qt - Test 001. Signals and slots

  • Result:68points,
  • Rating points-1
Last comments
Dec. 5, 2019, 4:15 p.m.
Evgenij Legotskoj

В этом слоте ваам нужно будет правильно смаппить координату. У QGraphicsView есть методы mapToScene, mapFromScene. Попробуйте использовать их.
LP
Dec. 5, 2019, 8:30 a.m.
Leonid Pivovarov

А без переопределения qgraphicsScene это сделать возможно? Есть же коорината нажатия кнопки мыши slotCustomMenuRequested(QPoint)
Dec. 5, 2019, 8:11 a.m.
Mihailll

//qDebug()<<"position:"<<event->pos(); //qDebug()<<"position:"<<event->screenPos(); qDebug()<<"position:"<<event->scenePos();
LP
Dec. 5, 2019, 8:09 a.m.
Leonid Pivovarov

Подскажите пожалуйста, К graphicsView я подключил обработку контекстного меню: сonnect(ui->graphicsView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotCustomMenuRequest…
Dec. 4, 2019, 3:49 p.m.
Evgenij Legotskoj

resources_big - это флаг для сборки c++ приложения. Если Nuitka не предоставляет какой-либо функционал для прикручивания конфигурационных директив типа CONFIG при компиляции, то сомнева…
Now discuss on the forum
Dec. 5, 2019, 4:12 p.m.
Evgenij Legotskoj

Это уже кастомная стилизация. Придётся отключать обрамление и самостоятельно реализовывать ресайз окна, его перемещение, стиль и т.д. Вот статья, как отключить обрамление окна - QML …
Dec. 5, 2019, 4:27 a.m.
qml_puthon_user

Вот код, вдруг, кому поможет. Код основной формы: import QtQuick 2.12import QtQuick.Controls 2.12import QtQuick.Layouts 1.3import "./Components/Panels" as PanelsApplicationWindow{…
Dec. 5, 2019, 2:50 a.m.
Evgenij Legotskoj

Создавайте новые темы, чтобы не было всё в куче.
Dec. 4, 2019, 10:07 p.m.
qml_puthon_user

Спасибо за помощь! :) Я попытаю надежды в ожидании QtQuick3D от Riverbank'a. :)
V
Dec. 4, 2019, 7:02 a.m.
Vitali

Со временем распаковки соласен - для слабых ноутов это проблема и именно Nuitka мог бы здесь помочь, если бы заработало. А QtlFW - это уже фреймфорк для создания инсталятора из имеющихся па…
EVILEG
About
Services
© EVILEG 2015-2019
Recommend hosting TIMEWEB