您好我正在使用我的第一个Django应用程序,我遇到了下一个问题:
包含的URLconf'aventus.urls'似乎没有任何内容 其中的模式。如果您在文件中看到有效模式,那么问题就出现了 可能是由循环导入引起的。
.
├── eventus
│ ├── eventus
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ │ ├── __init__.cpython-36.pyc
│ │ │ ├── urls.cpython-36.pyc
│ │ │ └── wsgi.cpython-36.pyc
│ │ ├── db.sqlite3
│ │ ├── settings
│ │ │ ├── __init__.py
│ │ │ ├── __pycache__
│ │ │ │ ├── __init__.cpython-36.pyc
│ │ │ │ ├── base.cpython-36.pyc
│ │ │ │ └── local.cpython-36.pyc
│ │ │ ├── base.py
│ │ │ ├── local.py
│ │ │ ├── prod.py
│ │ │ └── staging.py
│ │ ├── urls.py
│ │ └── wsgi.py
│ ├── manage.py
│ └── myapps
│ ├── __init__.py
│ ├── __pycache__
│ │ └── __init__.cpython-36.pyc
│ ├── events
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ │ ├── __init__.cpython-36.pyc
│ │ │ ├── admin.cpython-36.pyc
│ │ │ ├── forms.cpython-36.pyc
│ │ │ ├── models.cpython-36.pyc
│ │ │ ├── urls.cpython-36.pyc
│ │ │ └── views.cpython-36.pyc
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── forms.py
│ │ ├── media
│ │ │ └── events
│ │ │ ├── evento.png
│ │ │ ├── evento2.png
│ │ │ ├── evento2_a0yEovu.png
│ │ │ ├── evento3.png
│ │ │ ├── evento3_IufcnS5.png
│ │ │ └── evento_HFKQ1lo.png
│ │ ├── migrations
│ │ │ ├── 0001_initial.py
│ │ │ ├── 0002_auto_20170924_2140.py
│ │ │ ├── __init__.py
│ │ │ └── __pycache__
│ │ │ ├── 0001_initial.cpython-36.pyc
│ │ │ ├── 0002_auto_20170924_2115.cpython-36.pyc
│ │ │ ├── 0002_auto_20170924_2140.cpython-36.pyc
│ │ │ └── __init__.cpython-36.pyc
│ │ ├── models.py
│ │ ├── static
│ │ │ ├── css
│ │ │ │ ├── bootstrap-theme.css
│ │ │ │ ├── bootstrap-theme.css.map
│ │ │ │ ├── bootstrap-theme.min.css
│ │ │ │ ├── bootstrap-theme.min.css.map
│ │ │ │ ├── bootstrap.css
│ │ │ │ ├── bootstrap.css.map
│ │ │ │ ├── bootstrap.min.css
│ │ │ │ ├── bootstrap.min.css.map
│ │ │ │ └── estilos.css
│ │ │ ├── fonts
│ │ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ │ └── glyphicons-halflings-regular.woff2
│ │ │ └── js
│ │ │ ├── bootstrap.js
│ │ │ ├── bootstrap.min.js
│ │ │ └── npm.js
│ │ ├── templates
│ │ │ ├── base.html
│ │ │ └── events
│ │ │ ├── base_events.html
│ │ │ ├── index.html
│ │ │ └── panel
│ │ │ ├── crear_evento.html
│ │ │ ├── detalle_evento.html
│ │ │ ├── editar_evento.html
│ │ │ ├── eliminar_evento.html
│ │ │ ├── navbar.html
│ │ │ └── panel.html
│ │ ├── tests.py
│ │ ├── urls.py
│ │ └── views.py
│ └── users
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-36.pyc
│ │ ├── actions.cpython-36.pyc
│ │ ├── admin.cpython-36.pyc
│ │ └── models.cpython-36.pyc
│ ├── actions.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── 0001_initial.cpython-36.pyc
│ │ └── __init__.cpython-36.pyc
│ ├── models.py
│ ├── tests.py
│ └── views.py
└── requirements
├── base.txt
├── local.txt
├── prod.txt
└── staging.txt
我的文件events / urls.py是:
from django.conf.urls import url, include
from .views import IndexView, MainPanelView, CreateEvent, EventDetail, EventEdit, EventDelete
urlpatterns = [
#url(r'^$',views.index, name="index"),
url(r'^$',IndexView.as_view(), name="index"),
url(r'^panel/$', MainPanelView.as_view(), name="panel"),
url(r'^panel/evento/nuevo/$',CreateEvent.as_view(), name="nuevo"),
url(r'^panel/evento/(?P<pk>\d+)/$',EventDetail.as_view(), name="detalle"),
url(r'^panel/evento/editar/(?P<pk>\d+)/$',EventEdit.as_view(), name="editar"),
url(r'^panel/evento/eliminar/(?P<pk>\d+)/$',EventDelete.as_view(), name="eliminar"),
]
我的文件是events / views.py是:
from django.shortcuts import render, redirect, get_object_or_404
from .models import Event, Category
from django.views.generic import TemplateView, CreateView, DetailView, UpdateView, DeleteView
from myapps.users.models import User
from .forms import EventoForm
from django.core.urlresolvers import reverse, reverse_lazy
# Create your views here.
def login(request):
return render(request, "login.html", {})
#def index(request):
# events = Event.objects.all().order_by('-created')[:6]
# categories = Category.objects.all()
# return render(request, 'events/index.html', {'events': events, 'categories': categories})
class IndexView(TemplateView):
template_name = 'events/index.html'
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
context['events'] = Event.objects.all().order_by('-created')[:6]
context['categories'] = Category.objects.all()
return context
#def main_panel(request):
# #organizer = request.user.username
# events = Event.objects.filter(organizer__username='').order_by('is_free', '-created')
# cantidad_eventos = events.count()
# return render(request, 'events/panel/panel.html', {'events': events, 'cantidad': cantidad_eventos})
class MainPanelView(TemplateView):
template_name = 'events/panel/panel.html'
def get_context_data(self, **kwargs):
context = super(MainPanelView, self).get_context_data(**kwargs)
context['events'] = Event.objects.filter(organizer__username='').order_by('is_free', '-created')
context['cantidad'] = context['events'].count()
return context
#def crear_evento(request):
# if request.method == 'POST':
# modelform = EventoForm(request.POST, request.FILES)
# if modelform.is_valid():
# organizador = User.objects.get(pk=3)
# nuevo_evento = modelform.save()
# nuevo_evento.organizer = organizador
# nuevo_evento.save()
# return redirect ('events_app:panel')
# else:
# modelform = EventoForm
#
# return render(request, "events/panel/crear_evento.html", {'form': modelform})
class CreateEvent(CreateView):
form_class = EventoForm
template_name = 'events/panel/crear_evento.html'
success_url = reverse_lazy('events_app:panel')
def form_valid(self, form):
form.instance.organizer = User.objects.get(pk=3)
return super(CreateEvent, self).form_valid(form)
#def detalle_evento(request, evento_id):
# event = get_object_or_404(Event, pk=evento_id)
# return render(requestr, 'events/panel/detalle_evento.html', {'event': event})
class EventDetail(DetailView):
template_name = 'event/panel/detalle_evento.html'
model = Event
#def editar_evento(request, evento_id):
# event = get_object_or_404(Event, pk=evento_id)
#
# if request.method == 'POST':
# modelform = EventoForm(request.POST, request.FILES, instance=event)
# if modelform.is_valid():
# modelform.save()
# return redirect(reverse('events_app:panel'))
# else:
# modelform = EventoForm(instance=event)
#
# return render(request, 'events/panel/editar_evento.html', {'form': modelform, 'event': event})
class EventEdit(UpdateView):
template_name = 'events/panel/editar_evento.html'
success_url = reverse_lazy(reverse('events_app:panel'))
model = Event
form_class = EventoForm
def form_valid(self, form):
form.instance.organizer = User.objects.get(pk=3)
return super(EventEdit, self).form_vaslid(form)
#def eliminar_evento(request, evento_id):
# event = get_object_or_404(Event, pk=evento_id)
#
# if request.method == 'POST':
# event.delete()
# return redirect(reverse('events_app:panel'))
#
# return render(request, 'events/panel.eliminar_evento.html')
class EventDelete(DeleteView):
template_name = 'events/panel.eliminar_evento.html'
model = Event
success_url = Ureverse_lazy('events_app:panel')
context_object_name = 'event'
我的urls.py是:
from django.conf.urls import url, include
from django.contrib import admin
from django.conf import settings
urlpatterns = [
url(r'^', include('myapps.events.urls', namespace="events_app")),
url(r'^admin/', admin.site.urls),
]
if settings.DEBUG:
urlpatterns = [
url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT}
),
]#
我的events / models.py是:
from django.db import models
from django.template.defaultfilters import slugify
from django.conf import settings
# Create your models here.
class TimeStampModel(models.Model):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateField(auto_now=True)
class Meta:
abstract = True
class Category(models.Model):
name = models.CharField(max_length=50)
slug = models.SlugField(editable=False)
def save(self, *args, **kwargs):
if not self.id:
self.slug =slugify(self.name)
super(Category, self).save (*args,**kwargs)
def __unicode__(self):
return self.name
class Event(TimeStampModel):
name = models.CharField(max_length=200, unique=True)
slug = models.SlugField(editable=False)
summary = models.TextField(max_length=255)
content = models.TextField()
category = models.ForeignKey(Category)
place = models.CharField(max_length=50)
start = models.DateTimeField()
finish = models.ImageField(upload_to= 'events')
is_free = models.BooleanField(default=True)
amout = models.DecimalField(max_digits=5, decimal_places=2, default=0.00)
views = models.PositiveIntegerField(default=0)
organizer = models.ForeignKey(settings.AUTH_USER_MODEL)
def save(self, *args, **kwargs):
if not self.id:
self.slug =slugify(self.name)
super(Event, self).save (*args,**kwargs)
def __unicode__(self):
return self.name
class Assistant (TimeStampModel):
Assistant = models.ForeignKey(settings.AUTH_USER_MODEL)
event = models.ManyToManyField(Event)
attended = models.BooleanField(default=False)
has_paid = models.BooleanField(default=False)
def __unicode__(self):
return "%s %s" % (self.assistant.username , self.event.name)
class Comments(TimeStampModel):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
event = models.ForeignKey(Event)
content = models.TextField()
def __unicode__(self):
return "%s %s" % (self.user.username, self.event.name)
错误是下一个:
Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/Users/dmuino/.virtualenvs/Pruebas/lib/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
utility.execute()
File "/Users/dmuino/.virtualenvs/Pruebas/lib/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/dmuino/.virtualenvs/Pruebas/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/dmuino/.virtualenvs/Pruebas/lib/python3.6/site-packages/django/core/management/base.py", line 327, in execute
self.check()
File "/Users/dmuino/.virtualenvs/Pruebas/lib/python3.6/site-packages/django/core/management/base.py", line 359, in check
include_deployment_checks=include_deployment_checks,
File "/Users/dmuino/.virtualenvs/Pruebas/lib/python3.6/site-packages/django/core/management/base.py", line 346, in _run_checks
return checks.run_checks(**kwargs)
File "/Users/dmuino/.virtualenvs/Pruebas/lib/python3.6/site-packages/django/core/checks/registry.py", line 81, in run_checks
new_errors = check(app_configs=app_configs)
File "/Users/dmuino/.virtualenvs/Pruebas/lib/python3.6/site-packages/django/core/checks/urls.py", line 16, in check_url_config
return check_resolver(resolver)
File "/Users/dmuino/.virtualenvs/Pruebas/lib/python3.6/site-packages/django/core/checks/urls.py", line 26, in check_resolver
return check_method()
File "/Users/dmuino/.virtualenvs/Pruebas/lib/python3.6/site-packages/django/urls/resolvers.py", line 254, in check
for pattern in self.url_patterns:
File "/Users/dmuino/.virtualenvs/Pruebas/lib/python3.6/site-packages/django/utils/functional.py", line 35, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/Users/dmuino/.virtualenvs/Pruebas/lib/python3.6/site-packages/django/urls/resolvers.py", line 405, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/Users/dmuino/.virtualenvs/Pruebas/lib/python3.6/site-packages/django/utils/functional.py", line 35, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/Users/dmuino/.virtualenvs/Pruebas/lib/python3.6/site-packages/django/urls/resolvers.py", line 398, in urlconf_module
return import_module(self.urlconf_name)
File "/Users/dmuino/.virtualenvs/Pruebas/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 978, in _gcd_import
File "<frozen importlib._bootstrap>", line 961, in _find_and_load
File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 678, in exec_module
File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
File "/Users/dmuino/.virtualenvs/Pruebas/CursoProDjango/eventus/eventus/urls.py", line 27, in <module>
{'document_root': settings.MEDIA_ROOT}
File "/Users/dmuino/.virtualenvs/Pruebas/lib/python3.6/site-packages/django/conf/urls/__init__.py", line 85, in url
raise TypeError('view must be a callable or a list/tuple in the case of include().')
TypeError: view must be a callable or a list/tuple in the case of include().
我的base.py是下一个:
"""
Django settings for eventus project.
Generated by 'django-admin startproject' using Django 1.11.5.
For more information on this file, see
https://docs.djangoproject.com/en/1.11/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.11/ref/settings/
"""
import os
from unipath import Path
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = Path(__file__).ancestor(3)
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '70r=ho4co205hed75q!)am+dnqi=lj(98$lnadxmgf2n(s&_qi'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
DJANGO_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
LOCAL_APPS = [
'myapps.events',
'myapps.users',
]
THIRD_PARTY_APPS = [
]
INSTALLED_APPS = DJANGO_APPS + LOCAL_APPS + THIRD_PARTY_APPS
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'eventus.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'eventus.wsgi.application'
# Password validation
# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
AUTH_USER_MODEL = 'users.User'
我不知道是什么问题,因为在它工作正常之前,但现在我不知道是什么问题,我只从基于视图的视图中的视图中更改我的events / urls.py class,但在文件中注释文件中新视图之前的旧视图。
答案 0 :(得分:2)
回溯显示events/views.py
的第97行出现错误:
success_url = reverse_lazy(reverse('events_app:panel'))
为视图设置reverse
时,您无法致电success_url
。它导致Django在加载url配置之前尝试反转url,这导致“似乎没有任何模式”错误消息。
解决方案是使用reverse_lazy
。你有reverse_lazy(reverse(...))
没有意义。将其更改为仅使用reverse_lazy
:
success_url = reverse_lazy('events_app:panel')
您的第二个错误“视图必须是可调用的”是因为您为媒体文件提供服务的代码使用字符串'django.views.static.serve'
。这已过时,不适用于Django 1.10+。将其更新为src:
from django.conf.urls.static import static
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
答案 1 :(得分:-1)
在base.py中添加
INSTALLED_APPS += ['myapps.events',]