Здравствуйте стараюсь написать простое приложение используя Django REST но сталкнулся со следующей проблемой.
Код urlpatterns
urlpatterns = [
path('', views.post_list_view, name='index'),
url(r'^post/(?P<pk>\d+)$', views.post_detail_view, name='post-detail'),
]
Пытаюсь сделать переход от списка постов на страницу о конкретном посте но у меня почему-то просто обновляется текущая страница и все.
Главная страничка в которой ссылка на конкретный пост передается с помощью get_absolute_url
{% block content %}
<h1>Post List</h1>
{% if post_list %}
<ul>
{% for post in post_list %}
<li>
<a href={{post.get_absolute_url}}>{{ post.title }}</a> {{post.author}} ({{post.date}})
</li>
{% endfor %}
</ul>
{% else %}
<p>There are no posts in the site.</p>
{% endif %}
{% endblock %}
Модель поста
class Post(models.Model):
title = models.CharField(max_length=10000)
author = models.ForeignKey('User', related_name='author' ,on_delete=models.SET_NULL, null=True)
summary = models.TextField(max_length=1000, help_text="Enter the text of the post")
date = models.DateField(null=True, blank=True)
likes = models.ManyToManyField(User, related_name='likes', blank=True)
unlikes = models.ManyToManyField(User, related_name='unlikes', blank=True)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', args=[str(self.id)])
class Meta:
ordering = ["date"]
При этом если вруную прописать конкретный путь в url например: http://127.0.0.1:8007/api/v1.0/post/1 то все отлично работает
Когда просмотрел что же позвращает get_absolute_url то оказалось что все впорядке и возвращается правильный url что запутало меня окончательно, может быть это какието особенности REST framework-a?
Код функци для обработки странички со списком всех постов
@api_view(['GET'])
def post_list_view(request, format=None):
if request.method == 'GET':
queryset = Post.objects.all()
serializer = PostSerializer(queryset, many=True)
return Response({'post_list': serializer.data}, template_name='index.html')
Страничка конкретного поста
@api_view(['GET'])
def post_detail_view(request, pk):
try:
post = Post.objects.get(pk=pk)
except Post.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
if request.method == 'GET':
serializer = PostSerializer(post)
return Response({'post' : serializer.data}, template_name='SocialNetwork/post_detail.html')
В конце концов решил проблему таким образом
<li>
<a href='http://127.0.0.1:8007/api/v1.0/post/{{post.id}}'> {{ post.title }}</a> {{post.author}} ({{post.date}})
</li>
Вместо
<li>
<a href={{post.get_absolute_url}}>{{ post.title }}</a> {{post.author}} ({{post.date}})
</li>
Но это ведь костыль какой-то. Буду благодарен за помощь
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Прошу помочь разобраться с несложной проблемой, с которой мне пришлось столкнуться
Всем привет, как я могу запретить растягивание textarea через css?
Всем привет, подскажите, как сделать такую форму? Заранее спасибо