2016-03-20 11 views
0

私はdjangorestフレームワークチュートリアルに従い、ブログアプリケーションを構築しています。しかし、私はHTMLフォームにデータをレンダリングしようとしているが、私は 'NoReverseMatch'エラーに直面している。以下はdjangorestフレームワークでNoReverseMatchエラーが発生しました。

私のmodels.pyは

from django.db import models 

class BlogModel(models.Model): 
    blog_title = models.CharField(max_length = 50) 
    blog_post = models.TextField(max_length = 100) 
    blog_author = models.CharField(max_length = 30) 
    blog_tags = models.CharField(max_length = 30) 

    def __str__(self): 
     return self.blog_title 

    class Meta: 
     ordering = ('blog_title',) 

serializers.py

from rest_framework import serializers 
from blogg.models import * 

class BlogSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = BlogModel 
     fields = ('blog_title', 'blog_post', 'blog_author', 'blog_tags') 

views.py

from django.shortcuts import render 
from rest_framework.views import APIView 
from rest_framework.response import Response 
from django.http import Http404 
from blogg.models import * 
from blogg.serializers import * 
from rest_framework.renderers import TemplateHTMLRenderer 

class BlogList(APIView):  
    serializer_class = BlogSerializer 
    renderer_classes = [TemplateHTMLRenderer] 
    template_name = 'home.html' 
    def get(self, request, format = None):  
     blogs = BlogModel.objects.all() 
     #serializer = BlogSerializer(blogs, many = True) 
     #return Response(serializer.data) 
     return Response({'blogs':blogs}) 
    def post(self, request, format = None):  
     serializer = BlogSerializer(data = request.data) 
     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data) 
     return Response(serializer.errors) 

class BlogDetail(APIView): 
    serializer_class = BlogSerializer 
    renderer_classes = [TemplateHTMLRenderer] 
    template_name = "details.html" 
    def get_object(self, pk):  
     try: 
      return BlogModel.objects.get(pk = pk) 
     except BlogModel.DoesNotExist: 
      raise Http404 

    def get(self, request, pk, format = None): 
     blogs = self.get_object(pk) 
     serializer = BlogSerializer(blogs) 
     #return Response(serializer.data) 
     return Response({'serializer':serializer, 'blogs':blogs}) 

    def put(self, request, pk, format = None): 
     blogs = self.get_object(pk) 
     serializer = BlogSerializer(blogs, data = request.data) 
     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data) 
     return Response(serializer.errors) 

    def delete(self, request, pk, format = None): 
     blogs = self.get_object(pk) 
     blogs.delete() 
     serializer = BlogSerializer(blogs) 
     return Response(serializer.data) 

urls.py

from django.conf.urls import url, include 
from blogg import views 
from rest_framework.urlpatterns import format_suffix_patterns 


urlpatterns = [ 
    url(r'^blogs/$', views.BlogList.as_view()), 
    url(r'^blogs/(?P<pk>[0-9]+)/$', views.BlogDetail.as_view()), 

] 

urlpatterns = format_suffix_patterns(urlpatterns) 
です

details.html

{% load rest_framework %} 

<html><body> 

<h1>Blog - {{ blogs.title }}</h1> 

<form action="{% url 'details' blogs.id %}" method="POST"> 
    {% csrf_token %} 
    {% render_form serializer %} 
    <input type="submit" value="Save"> 
</form> 

</body></html> 

エラーの説明:ラインで

Reverse for 'details' with arguments '(1,)' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 

:私がアクセスしようとしています<form action="{% url 'details' blogs.id %}" method="POST">

URL:

http://127.0.0.1:8000/blogg/blogs/1/ 

は、あなたが私を助けてもらえこれの。他の情報を教えてください

答えて

0

名前付きURLを使用するには、あなたのURL関数にキーワード引数としてnameを渡しませんでした。このような

何かが正常に動作する必要があります:

url(r'^blogs/(?P<pk>[0-9]+)/$', views.BlogDetail.as_view(), name='details') 
0

最後に、私はこれを解決しました。私は単に私のURLに名前を追加し、

urls.pyで

追加name属性

from django.conf.urls import url, include 
from blogg import views 
from rest_framework.urlpatterns import format_suffix_patterns 


urlpatterns = [ 
    url(r'^blogs/$', views.BlogList.as_view()), 
    url(r'^blogs/(?P<pk>[0-9]+)/$', views.BlogDetail.as_view(), name = 'blog_details'), 

] 

urlpatterns = format_suffix_patterns(urlpatterns) 

details.html

{% load rest_framework %} 

<html><body> 

<h1>Blog - {{ blogs.title }}</h1> 

<form action="{% url 'blog_details' blogs.id %}" method="POST"> 
    {% csrf_token %} 
    {% render_form serializer %} 
    <input type="submit" value="Save"> 
</form> 

</body></html> 

以下のようにテンプレート内で同じ名前を使用し、それが働いています。 )

関連する問題