2017-06-14 53 views
0

爲什麼在嘗試運行我的服務器以訪問數據庫以查看我的代碼是否工作時出現錯誤?在Terminal的項目文件夾中,我運行sudo python manage.py runserver嘗試運行服務器,但由於上述錯誤而無法運行。我環顧四周,但找不到與我的問題直接相關的問題。爲什麼我的服務器不能開始運行?

我猜我的if()聲明是問題所在。

我得到的錯誤說:

RuntimeError: maximum recursion depth exceeded while calling a Python object 

這是我的views.py文件:

from .models import Album 
from django.shortcuts import render, redirect 
from django.contrib.auth import authenticate, login 
from django.core.urlresolvers import reverse_lazy 
from django.views import generic 
from django.views.generic import View 
from django.views.generic.edit import CreateView, UpdateView, DeleteView 
from .forms import UserForm 

class IndexView(generic.ListView): 
    template_name = 'music/index.html' 
    context_object_name = 'all_albums' 

    def get_queryset(self): 
     return Album.objects.all() 

class DetailView(generic.DeleteView): 
    model = Album 
    template_name = 'music/detail.html' 

class AlbumCreate(CreateView): 
    model = Album 
    fields = ['artist', 'album_title', 'genre', 'album_logo'] 

class AlbumUpdate(UpdateView): 
    model = Album 
    fields = ['artist', 'album_title', 'genre', 'album_logo'] 

class AlbumDelete(DeleteView): 
    model = Album 
    success_url = reverse_lazy('music:index') 

class UserFormView(View): 
    form_class = UserForm 
    template_name = 'music/registration_form.html' 

    # display blank form 
    def get(self, request): 
     form = self.form_class(None) 
     return render(request, self.template_name, {'form': form}) 

    def post(self): 
     form = self.form_class(request.POST) 

     if form.is_valid(): 
      user = form.save(commit=False) 

      #cleaned normalized data 

      username = form.cleaned_data['username'] 
      password = form.cleaned_data['password'] 

      user.set_password(password) 
      user.save() 

這裏的error

File "/Library/Python/2.7/site-packages/Django-1.11.2-py2.7.egg/django/urls/resolvers.py", line 255, in check 
    warnings.extend(check_resolver(pattern)) 
    File "/Library/Python/2.7/site-packages/Django-1.11.2-py2.7.egg/django/core/checks/urls.py", line 26, in check_resolver 
    return check_method() 
    File "/Library/Python/2.7/site-packages/Django-1.11.2-py2.7.egg/django/urls/resolvers.py", line 172, in check 
    warnings = self._check_pattern_startswith_slash() 
    File "/Library/Python/2.7/site-packages/Django-1.11.2-py2.7.egg/django/urls/resolvers.py", line 140, in _check_pattern_startswith_slash 
    regex_pattern = self.regex.pattern 

這是我的forms.py文件:

from django.contrib.auth.models import User 
from django import forms 

class UserForm(forms.ModelForm): # UserForm inherits from forms. 
    passwords = forms.CharField(widget=forms.PasswordInput) 

    class Meta: # Information about your class. 
     model = User # whenevr a creates sign up to your site it's gonna go in same table 
     fields = ['username', 'email', 'password'] 

這是我的urls.py文件:

from django.conf.urls import include, url 
from django.contrib import admin 
from django.conf import settings 
from django.conf.urls.static import static 

app_name = 'music' 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^music/', include('music.urls')) 
] 

if settings.DEBUG: 
    urlpatterns += static(settings.STATIC_URL, document_root = settings.STATIC_ROOT) 
    urlpatterns += static(settings.STATIC_URL, document_root=settings.MEDIA_ROOT) 

這是我的album_form.html文件:

{% extends 'music/base.html' %} 
{% block title %}Add a New Album{% endblock %} 
{% block album_active %}active{% endblock %} 

{% block body %} 
<div class="container-fluid"> 
    <div class="row"> 
     <div class="col-sm-12 col-md-7"> 
      <div class="panel panel-default"> 
       <div class="panel-body"> 
        <form class="horizontal" action="" method="post" enctype="multipart/form-data"> 
         {% csrf_token %} 
         {% include 'music/form-template.html' %} 
         <div class="form-group"> 
          <div class="col-sum-offset-2 col-sm-10"> 
           <button type="submit" class="btn btn-success">Submit</button> 
          </div> 
         </div> 
        </form> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 
{% endblock %} 

這是我的index.html文件:

{# loads path to static file #} 

{% extends 'music/base.html' %} 

{% block body %} 

    <ul> 
     {% for album in all_albums %} 
      <li><a href="{% url 'music:detail' album.pk %}">{{ album.album_title }}</a></li> 
     {% endfor %} 
    </ul> 

{% endblock %} 
+0

@maSTAShuFu什麼是CTE? – bojack

+0

@maSTAShuFu我誤將這個標籤。爲此道歉。 – bojack

回答

2

我懷疑你有從遞歸引用您的在music.urls中包含urls.py罪ce django拋出的錯誤是針對URL解析器的。

你的if語句沒有錯誤。 'music:index'是指名稱空間的url名稱,在urls.py中仍然需要命名的url語句。由於在簡單的項目中,只有一個應用程序,名稱空間是多餘的。所以在大多數情況下,應該使用'index',就像我在下面顯示的那樣。

在你的urls.py中,包含了music.urls,它似乎是遞歸引用。 'music.urls'是指音樂目錄中的文件urls.py。 如果你沒有一個有效的'music.urls'python對象,那麼你的include語句是錯誤的。

我沒有在我的項目中使用包含網址,因此需要爲views.py中定義的每個視圖聲明一個聲明。要測試您的服務器是否正確啓動,我會嘗試以下urlpatterns。不要忘記導入IndexView和DetailView。在首先測試1或2之後爲其他視圖添加更多url語句。

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^music/index/$', IndexView.as_view() , name='Index'), 
    url(r'^music/detail/(?P<pk>[0-9]+)/$', DetailView.as_view() , name='Detail'), 
] 

我使用命名的網址,並在index.html的語句應該寫成如下:

<a href="{% url 'Detail' album.pk %}">{{ album.album_title }}</a> 

的命名空間的音樂:「被省略,因爲它是隱含的,看起來簡單。您應該將它放在簡單的應用程序中,因爲它可能會讓初學者感到困惑。

+0

我沒有music.urls文件。我只有一個網址。py文件 – bojack

+0

我在我剛剛發佈的'album_form.html'文件中有一個for循環,也許這是什麼原因造成的? – bojack

相關問題