0

그래서 간단한 업데이트 프로필 응용 프로그램을 만들려고했지만 업데이트 페이지에 액세스하려고 할 때 수동으로 링크를 작성해야합니다 +이 경우 ID는 'accounts/update/2'와 같습니다. 다른 내가 "{% URL 'edit_user을'%}"나는이에서 NoReverseMatch/

`NoReverseMatch at/

Reverse for 'edit_user' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['accounts/update/(?P<pk>\\d+)/']` 

url.py을 얻을 사용하려고하면 작동하지 않을

url(r'^admin/', admin.site.urls), 
url(r'^$', main_views.home, name='home'), 
url(r'^uprofile$', main_views.uprofile, name='uprofile'), 
url(r'^accounts/update/(?P<pk>\d+)/', User_Profile_views.edit_user, name='edit_user'), 
url(r'^accounts/', include('allauth.urls')), 

views.py

@login_required() # only logged in users should access this 
def edit_user(request, pk): 
    # querying the User object with pk from url 
    user = User.objects.get(pk=pk) 

    # prepopulate UserProfileForm with retrieved user values from above. 
    user_form = UserForm(instance=user) 

    # The sorcery begins from here, see explanation below 
    ProfileInlineFormset = inlineformset_factory(User, UserProfile, fields=('website', 'bio', 'phone', 'city', 'country', 'organization')) 
    formset = ProfileInlineFormset(instance=user) 

    if request.user.is_authenticated() and request.user.id == user.id: 
     if request.method == "POST": 
      user_form = UserForm(request.POST, request.FILES, instance=user) 
      formset = ProfileInlineFormset(request.POST, request.FILES, instance=user) 

      if user_form.is_valid(): 
       created_user = user_form.save(commit=False) 
       formset = ProfileInlineFormset(request.POST, request.FILES, instance=created_user) 

       if formset.is_valid(): 
        created_user.save() 
        formset.save() 
        return HttpResponseRedirect('/accounts/profile/') 

     return render(request, "account/account_update.html", { 
      "noodle": pk, 
      "noodle_form": user_form, 
      "formset": formset, 
     }) 
    else: 
     raise PermissionDenied 
오류가 말한대로

HTML 양식

<div class="col s12 m8 offset-m2"> 
     <div class="card"> 
     <div class="card-content"> 
     <h2 class="flow-text">Update your information</h2> 
      <form action="." method="POST" class="padding"> 
      {% csrf_token %} {{ noodle_form.as_p }} 
      <div class="divider"></div> 
      {{ formset.management_form }} 
       {{ formset.as_p }} 
      <button type="submit" class="btn-floating btn-large waves-light waves-effect"><i class="large material-icons">done</i></button> 
      <a href="#" onclick="window.history.back(); return false;" title="Cancel" class="btn-floating waves-effect waves-light red"><i class="material-icons">history</i></a> 

     </form> 
     </div> 
    </div> 
</div> 
+0

내가 게시 한 코드의 어느 곳에서나'{% url 'edit_user'%}'을 (를) 당신이 보지 않습니다. – Marcs

+0

그건 사실이야 Navbar에서 사용했기 때문에 base.html – LeLouch

답변

1

는 edit_user는 매개 변수를 필요 : 사용자의 ID는 편집 할 수 있습니다. url 태그에이를 전달해야합니다.

{% url 'edit_user' pk=my_user.pk %} 

또는 사용자 개체의 이름이 무엇이든간에.

+0

감사 메이트 {% url 'edit_user'pk = user.pk %}가 해결했습니다. – LeLouch