2017-08-28 88 views
0

我得到404錯誤的彈出窗體,我試圖打開點擊文本鏈接。django彈出窗口模式形式404錯誤

賬戶/ urls.py

url("_/user-popup/(?P<key>\w+)/$", views.user_popup_form, name="user_popup_form"), 
url("_/user-popup/(?P<key>\w+)/(?P<pk>[^/]+)/$", views.user_popup_form, name="user_popup_form"), 

賬戶/ views.py--

POPUP_FORMS = { 
    "profile": { 
     "form": forms.UserProfileForm, 
     "templates": { 
      ".nav_user_name": "user/nav_user_name.html", 
      ".profile_info": "user/profile_info.html", 
      ".about_text": "user/about_text.html", 
     } 
    } 
    # etc. 
} 

def user_popup_form(request, key, pk=None): 
    """ 
    Handle any form with a "user" field pointing back 
    to the logged in user. Otherwise return a 
    HttpResponseForbidden response. 
    """ 

    if (not request.user.is_authenticated) or (not key in POPUP_FORMS): 
     raise HttpResponseForbidden() 

    content = {} 

    instance = POPUP_FORMS[key]['form']._meta.model.objects.filter(user=request.user) 
    if pk: 
     instance = instance.filter(pk=Hasher.decode(pk)[0]) 
    else: 
     if not isinstance(POPUP_FORMS[key]['form']._meta.model.user.field, OneToOneField): 
      instance = None 
    instance = instance[0] if instance else None 

    if request.POST or request.FILES: 
     form = POPUP_FORMS[key]['form'](request.POST, request.FILES, instance=instance, initial={"user": request.user}) 
     success = form.is_valid() 
     if success: 
      instance = form.save(commit=False) 
      instance.user = request.user 
      try: 
       instance.save() 
      except IntegrityError: 
       success = False 
       form.errors['__all__'] = ["Form data not unique - have you already added one of these?"] 
      except Exception as e: 
       success = False 
       form.errors['__all__'] = [e] 
      else: 
       models.User.objects.update() 
       request.user.refresh_from_db() 
       POPUP_FORMS[key]['form']._meta.model.objects.update() 
       for name, template in POPUP_FORMS[key]['templates'].items(): 
        content[name] = render_to_string(template, {"profile": request.user.profile}, request) 

    else: 
     form = POPUP_FORMS[key]['form'](instance=instance, initial={"user": request.user}) 
     success = False 

    return JsonResponse({ 
     "form": Template("{% load crispy_forms_tags %}{% crispy form %}").render(Context({"request": request, "form": form})), 
     "title": capfirst(key), 
     "success": success, 
     "content": content 
    }) 

site.js靜態文件夾下

$("body").on("click tap", "a[data-user-popup]", function(e) { 
     e.preventDefault(); 
     var button = $(this); 
     button.attr("disabled", true).find("span.fa").addClass("fa-spinner fa-spin"); 
     var url = "/_/user-popup/" + button.attr("data-user-popup") + "/"; 
     if(button.attr("data-item-id")) { 
      url += button.attr("data-item-id") + "/"; 
     } 
     alert(url); 
     $.ajax({ 
      url: url, 
      type: "GET" 
     }).always(function() { 
      button.attr("disabled", false).find("span.fa").removeClass("fa-spinner fa-spin"); 
     }).done(function(data) { 
      bootbox.hideAll(); 
      bootbox.dialog({ 
       title: data.title, 
       message: data.form, 
       html: true, 
       buttons: { 
        "save": { 
         className: "btn-success", 
         label: "Save", 
         callback: function() { 
          var saveButton = $(".bootbox-footer .btn-success"); 
          saveButton.attr("disabled", true).find("span.fa").addClass("fa-spinner fa-spin"); 
          $.ajax({ 
           url: url, 
           type: "POST", 
           data: $(".bootbox-body form").serialize(), 
           headers: { "X-CSRFToken": Refocus.csrfToken } 
          }).always(function() { 
           saveButton.attr("disabled", false).find("span.fa").removeClass("fa-spinner fa-spin"); 
          }).done(function(data) { 
           if(data.success) { 
            bootbox.hideAll(); 
            for (var key in data.content) { 
             $(key).html(data.content[key]); 
            } 
           } else { 
            $(".bootbox-body").html(data.form); 
            $(".modal").scrollTop(0); 
           } 
          }); 
          return false; 
         } 
        }, 
        "cancel": { 
         className: "btn-default", 
         label: "Cancel" 
        } 
       } 
      }).on('shown.bs.modal', function() { 
       $(".modal.fade.in .modal-body input, .modal.fade.in .modal-body textarea, .modal.fade.in .modal-body select").first().select().focus(); 
      }); 
      $(".modal.fade.in").scrollTop(0); 
     }); 
    }); 

用戶個人資料網址爲

http://127.0.0.1:8000/account/user和代碼彈出是

{% if profile.pk == request.user.profile.pk %} 
<p><a data-user-popup="profile" href="#" class="btn btn-primary"><span class="fa fa-edit"></span> Edit profile</a></p> 
{% endif %} 

任何幫助,高度讚賞。提前致謝。

+0

什麼錯誤,如果'DEBUG = TRUE;在你的settings.py? – chicocvenancio

+0

在settings.py中調試設置爲true。我在終端出現錯誤。它是 '未找到:/ user_popup/profile [28/Aug/2017 22:59:09]「GET/user_popup/profile HTTP/1.1」404 2187' –

+0

檢查chrome dev-tools網絡選項卡中的完整響應。 – chicocvenancio

回答

1

您需要在項目中包含urls.py文件(docs)您的應用程序urls.py文件:

from django.conf.urls import include, url 

urlpatterns = [ 
    (...) 
    url(r'_/', include('account.urls')), 
] 
+0

我做到了。仍然獲得404。 –