Django: Рендеринг текста и ссылки из текстового поля в базе данных
Я новичок в веб-разработке и в настоящее время создаю блог. Я пытаюсь вывести текст, который я написал в текстовом поле внутри базы данных. Проблема в том, что этот текст включает ссылку, которая ссылается на другую статью блога.
This is the textfield from "redirect" in Articles model
Some text I want to render in blog with a link <a href="{{ STATIC_URL }}/articles/8-Photogenic-Spiral-Staircases" class="link-within">8 Photogenic Spiral Staircases</a>
html
<p class="article-redirect">{{ article.redirect|safe|escape }}</p>
HTML успешно отображается с помощью фильтра |safe
, но когда я нажимаю на ссылку, появляется ошибка 404, запрашиваемый URL в сообщении об ошибке -
Request URL: http://localhost:8000/articles/7-Photogenic-Spiral-Staircases%7B%7B%20STATIC_URL%20%7D%7D/articles/8-Photogenic-Spiral-Staircases
В приведенном выше URL, вызвавшем ошибку, "7-Photogenic-Spiral-Staircases" - это текущая запись блога, а "8-Photogenic-Spiral-Staircases" - это запись блога, к которой я хочу перейти
Может ли кто-нибудь помочь мне понять, почему это не работает и какое может быть возможное решение?
models.py
class Articles(models.Model):
title = models.CharField(max_length=155)
slug = models.SlugField(unique=True, max_length=155)
summary = models.TextField(blank=True, null=True)
redirect = models.TextField(blank=True, null=True)
views.py
def article(request, slug):
article = get_object_or_404(Articles, slug=slug)
context = {
'article': article,
}
return render(request, 'articletemplate.html', context)
urls.py
urlpatterns = [
path("articles/<str:slug>/", views.article, name="articles")
]
Обновление перейти на другую ссылку с другой страницы
если вы хотите вывести ссылку с текущей страницы на другую страницу.
попробуйте это
Some text I want to render in blog with a link <a href="http://localhost:8000/articles/7-Photogenic-Spiral-Staircases" class="link-within">8 Photogenic Spiral Staircases</a>
я использую фактическое имя хоста (локальный хост), это должно работать.
Проблема
у вас не работает, потому что вы не добавили имя хоста внутри вашей ссылки, если вы не добавите его, то django возьмет текущий url + все, что вы напишите внутри ссылки, и он не сможет понять эту переменную {{ STATIC_URL }}
. Одно из возможных решений для этого - использовать полный url, который вы хотите перенаправить внутри ссылки href
Solution
.
models.py
from django.urls import reverse
class Articles(models.Model):
title = models.CharField(max_length=155)
slug = models.SlugField(unique=True, max_length=155)
summary = models.TextField(blank=True, null=True)
redirect = models.TextField(blank=True, null=True)
recommendations = models.ManyToManyField("Articles",null=True, blank=True)
def get_absolute_url(self):
return reverse('articles',args=[self.slug])
1)python manage.py makemigrations
2)python manage.py migrate
3)now inside your django admin you can add inside recommendations any article related to the current one.
4)now inside your redirect field you can just add a text saying like 'if you want to learn more about this topic please refer to'
шаблон:
<p class="article-redirect">{{ article.redirect }} <br>
{% for i in article.recommendations.all %}
<a href="{{ i.get_absolute_url }}">{{ i.title }}</a>
{% endfor %}
</p>