为什么我的服务器不能开始运行?
为什么在尝试运行我的服务器以访问数据库以查看我的代码是否工作时出现错误?在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 %}
我怀疑你有从递归引用您的在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>
的命名空间的音乐:“被省略,因为它是隐含的,看起来简单。您应该将它放在简单的应用程序中,因为它可能会让初学者感到困惑。
@maSTAShuFu什么是CTE? – bojack
@maSTAShuFu我误将这个标签。为此道歉。 – bojack