使用参数'('',)'找不到'update'的反转。尝试了1种模式:['vehicles_app /(?P <post_id> [0-9] +)/ update_post / $']

时间:2018-03-31 21:00:39

标签: python django python-3.x

我搜索了很多,但找不到解决方案。之前有很多相关的问题,我认为没有错,但仍然有错误。

Reverse for 'update' with arguments '('',)' not found. 1 pattern(s) tried: ['vehicles_app/(?P<post_id>[0-9]+)/update_post/$']

这是我的index.html

{% for obj in context %}

<div class="container" style="padding-left:240px; padding-right:0px; width: 78%; margin-bottom:30px;">
    <div class="well" style=" background-color: rgb(220, 220, 220);">
        <div class="media">
            <div class="media-body">
          <div class="list-group">
              <div class="d-flex w-100 justify-content-between">
            <h1 class="media-heading" style="margin-top:20px; margin-bottom:20px; color: black;">{{ obj.title }}</h1>
          {% for img in obj.postpicture_set.filter %}
            <div class="w3-content" style="max-width:800px">
                {% if img.image %}
                   <img style="margin-bottom:30px; float: right" class="mySlides" src="{{ img.image.url }}" width="200" height="180">
                {% endif %}
              </div>
          {% endfor %}
            <p> {{ obj.details }} </p>
            <ul class="list-inline list-unstyled">
                <li><span><i class="glyphicon glyphicon-calendar"></i> {{ obj.date }} </span></li>
              <li>|</li>
              <span><i></i> {{ obj.brand }} </span>
                  <li>|</li>
                  <span><i></i> {{ obj.city }} </span><br>

              <form action="{% url 'vehicles_app:data' obj.id %}" method="post">{% csrf_token %} <input type="hidden" name="post_id" value="{{ obj.id }}">
                <input type="hidden" name="usr_id" value="{{ obj.user_id }}">
                <td><input style="margin-top:70px; margin-bottom:20px; margin-left:10px;" type="submit" class="btn btn-primary" value="Details"</td></form>
                {% if request.user == obj.user or request.user.is_superuser %}

                <form action="{% url 'vehicles_app:file-delete' obj.id %}" method="post" style="display: inline;">{% csrf_token %} <input type="hidden" name="post_id" value="{{ obj.id }}">
                  <td><input style="margin-top:70px; margin-bottom:20px; margin-left:10px;" type="submit" value="Delete" class="btn btn-danger btn-sm"</td></form>


                  <form action="{% url 'vehicles_app:update' obj.id %}" method="post" style="display: inline;">{% csrf_token %}<input type="hidden" name="post_id" value="{{ obj.id }}">
                    <td><input style="margin-top:70px; margin-bottom:20px; margin-left:10px;" type="submit" value="Update" class="btn btn-default btn-sm"</td></form>  
                    {% else %}
                    {% endif %}
                    </ul>
             </div>
        </div>
           </div>
         </div>

         </div>
         </div>
        {% endfor %}

这是views.py

def update_post(request, post_id):
    ImageFormSet = modelformset_factory(
        PostPicture,
        form=AddPictures,
        extra=10,
        min_num=1
    )
    post_form = get_object_or_404(Posts, pk=post_id)
    if request.method == "POST":
        form = AddFile(request.POST, instance=post_form)
        formset = ImageFormSet(
            queryset=PostPicture.objects.filter(
                post=post_id
            )
        )
        if form.is_valid() and formset.is_valid():
            form.save()

            for form in formset:
                if form:
                    image = form['image']
                    photo = PostPicture(post=form, image=image)
                    photo.save()
                    messages.success(
                        request, 'Post submitted Successfully!'
                    )
                    return render(
                        request,
                        'vehicles_app/update_post.html',
                        {
                            'form': form,
                            'formset': formset, 
                            'post_form':post_form
                        }
                    )
        else:
            print(form.errors, formset.errors)
else:
    form = AddFile()
    formset = ImageFormSet(
        queryset=PostPicture.objects.none()
    )
    return render(
        request,
        'vehicles_app/update_post.html',
        {
            'form': form,
            'formset': formset,
            'post_form':post_form
        }
    )

以下是我的更新的网址,只有更新无效,但数据和删除等其他功能正常。

urlpatterns = [
    url(r'^signUp/$', views.signUp, name='signUp'),
    url(r'^user_login/$', views.user_login, name='user_login'),
    url(r'^addfile/$', views.addfile, name='addfile'),
    url(r'^(?P<pk>[0-9]+)/delete/$', views.FileDelete.as_view(), name='file-delete'),
    url(r'^(?P<post_id>[0-9]+)/data/$', views.data, name='data'),
    url(r'^(?P<post_id>[0-9]+)/update_post/$', views.update_post, name='update'),
    url(r'^myposts/$', views.myposts, name='myposts'),
    url(r'^received/$', views.received, name='received'),
    url(r'^received_files/$', views.received_files, name='received_files'),
]

这是我的update_post.html

    {% extends "vehicles_app/index.html" %}
    {% block body_block %}
    {% load staticfiles %}
    <html>
    <body>

              <div class="container" id="addfile_form" style="margin-                        left:200px; width: 78%;">
          <!-- <div class="col-xs-12 col-sm-4 col-md-6 col-sm-offset-2 col-        md-offset-2"> -->
          <div class="panel panel-default">

            <div>
             {% if messages %}
               <ul class="messages">
                 {% for message in messages %}
                 <h2 style="margin-left:100px;">  {{ message }} </h2>
                 {% endfor %}
               </ul>
             {% endif %}
           </div>

        <div class="panel-heading">
          <b><h2 id="post_head" class="panel-title">Update Post here!</h2>                  
     </b>
        </div>
              <div class="panel-body">
            <form id="post_form" method="post" action="{% url 
    'vehicles_app:update_post' post_id %}"
                  enctype="multipart/form-data">
                  {% csrf_token %}

                <div class="row">
                <div class="form-group">
                  <div style="float: left; width: 50%">
                  <label for="title">Ad Title</label>
                  </div>
                  <div class="title" style="float: right; width: 45%">
                    <input type="text" name="title" placeholder="Type Here"           
    value='{{ form.title.value }}' required>
                  </div>
                </div>
                <br>

                <div class="form-group">
                  <div style="float: left; width: 50%">
                  <label for="city">City</label>
                  </div>
                  <div class="city" style="float: right; width: 45%">
                    <select name="city"  value='{{ form.city.value }}'>
                      <option selected="selected" 
    value="islamabad">Islamabad</option>
                      <option value="karachi">Karachi</option>
                      <option value="lahore">Lahore</option>
                      <option value="peshawar">Peshawar</option>
                      <option value="quetta">Quetta</option>
                      <option value="multan">Multan</option>
                      <option value="faisalabad">Faisalabad</option>
                    </select>
                  </div>
                </div>
                <br>

                <div class="form-group">
                  <div style="float: left; width: 50%">
                  <label for="price">Price</label>
                  </div>
                  <div class="price" style="float: right; width: 45%">
                    <input type="text" name="price" placeholder="Type Here" 
    value='{{ form.price.value }}' required>
                  </div>
                </div>
                <br>

                <div class="form-group">
                  <div style="float: left; width: 50%">
                  <label for="brand">Brand</label>
                  </div>
                  <div class="brand" style="float: right; width: 45%">
                    <select name="brand" value='{{ form.brand.value }}'>
                      <option selected="selected" 
    value="honda">Honda</option>
                      <option value="audi">Audi</option>
                      <option value="bmw">BMW</option>
                      <option value="suzuki">Suzuki</option>
                      <option value="toyota">Toyota</option>
                      <option value="lexus">Lexus</option>
                      <option value="hyundai">Hyundai</option>
                      <option value="jeep">Jeep</option>
                      <option value="mazda">Mazda</option>
                      <option value="mitsubishi">Mitsubishi</option>
                      <option value="daewoo">Daewoo</option>
                    </select>
                  </div>
                </div>
                <br>

                <div class="form-group">
                  <div style="float: left; width: 50%">
                  <label for="modelyear">Model-Year</label>
                  </div>
                  <div class="modelyear" style="float: right; width: 45%">
                    <input type="text" name="modelyear" 
    placeholder="ie:1970-2018"  value='{{ form.modelyear.value }}' required>
                  </div>
                </div>
                <br>

                <div class="form-group">
                  <div style="float: left; width: 50%">
                  <label for="condition">Condition</label>
                  </div>
                <div class="condition" style="float: right; width: 45%">
                  <select name="condition"  value='{{ form.condition.value 
    }}'>
                    <option selected="selected" value="new">NEW</option>
                    <option value="used">USED</option>
                  </select>
                </div>
                </div>
                <br>

                <div class="form-group">
                  <div style="float: left; width: 50%">
                  <label for="mileage">Mileage</label>
                  </div>
                <div class=mileage style="float: right; width: 45%">
                    <input type="text" name="mileage" placeholder="ie:50000"  
    value='{{ form.mileage.value }}' required>
                </div>
              </div>
                </div>
                <br>


                <div class="form-group">
                  <div style="float: left; width: 50%">
                  <label for="details">Type details here</label>
                  </div>
                <div class="details" style="float: right; width: 45%">
                  <textarea name="details" rows="9" cols="45" value='{{ 
    form.details.value }}' required></textarea>
                </div>
                </div>
                <br>
                <br>
                <br>
                <br>
                <br>
                <br>
                <br>


                {{ formset.management_form }}
                  {% if formset %}
                    {% for form in formset %}
                      {% if form %}
                      <table class="display" cellspacing="1" width="100%">
                        <tr>
                          <td>{{ form }}</td>
                        </tr>
                      </table>
                      {% endif %}
                    {% endfor %}
                  {% endif %}


                <input type="submit" name="submit" value="Update" class="btn 
    btn-info" id="post_btn">
            </form>
    </div>
    </div>
    </div>

    <script 
    src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"> 
   </script>
   <link rel="stylesheet" 


href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script 
   src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"> 
   </script>


    </body>
    </html>

    {% endblock %}

1 个答案:

答案 0 :(得分:0)

错误来自update_post.html模板中的此网址标记。

<form id="post_form" method="post" action="{% url 'vehicles_app:update_post' post_id %}"

您在错误消息中收到错误with arguments '('',)',因为您尚未在模板上下文中包含post_id。您可以添加:

return render(request, 'vehicles_app/update_post.html', {
    'form': form,
    'formset': formset, 
    'post_form': post_form,
    'post_id': post_id,
})

请记住为GET和POST请求执行此操作。

相关问题