Не происходит переход на страницу Python/Django

221
20 августа 2018, 05:20

Здравствуйте стараюсь написать простое приложение используя 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>

Но это ведь костыль какой-то. Буду благодарен за помощь

READ ALSO
Как закрепить footer внизу страницы? [дубликат]

Как закрепить footer внизу страницы? [дубликат]

На данный вопрос уже ответили:

196
Не записывает стили на breakpoints css

Не записывает стили на breakpoints css

Прошу помочь разобраться с несложной проблемой, с которой мне пришлось столкнуться

205
Как запретить растягивание textarea через css?

Как запретить растягивание textarea через css?

Всем привет, как я могу запретить растягивание textarea через css?

218
Форма заполнения HTML [закрыт]

Форма заполнения HTML [закрыт]

Всем привет, подскажите, как сделать такую форму? Заранее спасибо

207