Как разобрать "src" тега изображения в текстовом поле Django?

В моем HTML шаблоне есть код следующего содержания

<div class="blog-content">
    {{post.text|safe|linebreaks}}
    <p><img src="{{ image_dict.1.url }}" alt=""></p>
</div>

Вышеуказанное изображение прекрасно отображается в HTML. Мой вид выглядит следующим образом

def post_detail(request, slug):
post = BlogPost.objects.get(slug=slug)
images = post.images.all()
image_dict = {}
for image in images:
    image_dict[image.image_order] = image.image
    print(image.image)

return render(request, 'blog/post_detail.html', {
    'post': post,
    'images': images,
    'image_dict': image_dict,
})

В основном я настраиваю его так, чтобы я мог выводить изображения через {{image_dict.image_order.url}}

Но я хочу отобразить изображения следующим образом, чтобы связать их с каждым абзацем текста так

Текст в Django TextField

Однако, пока код в шаблоне оценивает url изображения, например, для изображения с порядком '1'

<p><img src="{{ image_dict.1.url }}" alt=""></p> becomes
<p><img src="/media/images/codewithlewis.png" alt=""></p>

Точно такой же код, который я набрал в текстовом поле django (как прикреплено на изображении выше) остается как

<p><img src="{{ image_dict.1.url }}" alt=""></p> 

внутри HTML и, конечно же, ничего не отображается.

Снимок экрана:

Я довольно новичок в Django, но мне кажется, что я перепробовал все. Как я могу исправить это? Спасибо.

Похоже, что вы храните Django Template в TextField (вместо вашей папки templates).

Если это так, то вам нужно использовать движок шаблонов Django для рендеринга этого текстового поля, подобно тому, как Django рендерит файлы шаблонов.

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

from django.template import Context, Template
image_dict = {
    0: {"url": "https://google.com"},
    1: {"url": "https://amazon.com"},
}
my_template_snippet = Template(my_model_instance.my_text_field)
my_rendered_template_snippet = my_template_snippet.render(
    Context({"image_dict": image_dict})
)

В вашем представлении это может выглядеть следующим образом.

from django.template import Context, Template
def post_detail(request, slug):
    # Get BlogPost
    post = BlogPost.objects.get(slug=slug).prefetch_related("images")
    # Construct image_dict
    images = post.images.all()
    image_dict = {}
    for image in images:
        image_dict[image.image_order] = image.image
    # Convert my_text_field to Template
    my_template = Template(post.my_text_field)
    # Render Template using image_dict
    my_template_rendered = my_template.render(Context({"image_dict": image_dict}))
    # Set BlogPost.my_text_field to the Rendered Template
    post.my_text_field = my_template_rendered
    return render(
        request,
        "blog/post_detail.html",
        {
            "post": post,
            "images": images,
            "image_dict": image_dict,
        },
    )
Вернуться на верх