AttributeError:“NoneType”对象没有属性,因为相关对象slug不在vi中

2024-04-24 22:46:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我的应用程序(部署到Heroku-fwiw)有两个模型对象,Org和{},具有相应的对象视图,没有问题/错误。当我引入第三个对象Theme并修改了一些url路由以使用其slug时,我现在遇到了以下错误,请求Org(视图以org.slug为参数的url路径)的视图:

AttributeError: 'NoneType' object has no attribute 'org'404

在org.models.py在

class Org(models.Model):
     name = models.CharField(max_length=100, unique=True)
     slug = AutoSlugField(populate_from='name')
     themes = models.ManyToManyField('common.Theme', related_name='orgs', blank=True)
     ...

     def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('org-detail', args=[self.slug])

class Event(models.Model):
      org = models.ForeignKey('Org', on_delete=models.CASCADE, related_name='events')
      name = models.CharField(max_length=120)
      slug = AutoSlugField(populate_from='name', unique_with='org', sep='-')
      ...

      def __str__(self):
        return self.name

      def get_absolute_url(self):
        return reverse('event-detail', args=[self.org.slug, self.slug])

在通用.models.py在

^{pr2}$

在org.url.py在

urlpatterns = [
    url(r'^org/(?P<org_slug>[-\w]+)/?$', views.org, name='org-detail'),
    url(r'^org/(?P<org_slug>[-\w]+)/event/(?P<slug>[-\w]+)/', include([
        url(r'^$', views.event, name='event-detail'),
        ...
    ])),
    ...
]

在common.url.py在

urlpatterns = [
     url(r'^(?P<slug>[-\w]+)/?$', views.theme, name='theme'),
     ...
]

在组织视图.py在

def event(request, org_slug, slug):

     event = Event.objects.filter(slug=slug).order_by('id').first()

     if event.org.slug != org_slug:
         raise Http404

     event_url = '{}{}{}'.format(settings.DEFAULT_PROTOCOL, settings.APP_DOMAIN, event.get_absolute_url())

     context = {
         'event': event,
         'event_url': event_url,
         'event_url_encode': urlquote_plus(event_url),
     }

     return render(request, 'orgs/event.html', context)


def org(request, slug, role=None):
    try:
        org = Org.objects.get(slug=slug)
    except Org.DoesNotExist:
        return HttpResponseBadRequest()

    context = {
        'org': org,
    }

    return render(request, 'orgs/org.html', context)

在视图.事件按预期返回有效响应。views.org网站以前,但现在返回404。log err实际上显示了由视图.事件,但我不明白为什么:

    Traceback (most recent call last): 
    File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner 
    response = get_response(request) 
    File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response 
    response = self._get_response(request) 
    File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response 
    response = self.process_exception_by_middleware(e, request) 
File "/app/.heroku/python/lib/python3.6/site-packages/channels/handler.py", line 237, in process_exception_by_middleware 
return super(AsgiHandler, self).process_exception_by_middleware(exception, request) 
File "/app/.heroku/python/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/app/.heroku/python/lib/python3.6/contextlib.py", line 52, in inner 
    return func(*args, **kwds) 
    File "/app/project/utils/helpers.py", line 28, in _decorated 
    return view(request, *args, **kwargs) 
    File "/app/.heroku/python/lib/python3.6/site-packages/htmlmin/decorators.py", line 13, in minify 
    response = f(*args, **kwargs) 
    File "/app/orgs/views.py", line 243, in event 
    if event.org.slug != org_slug: 
    AttributeError: 'NoneType' object has no attribute 'org' 

{{cd8>NoneType的views.org网站如果视图.事件返回正确的对象?谢谢


Tags: namepyorgselfeventappurlget
2条回答

实际上,代码中的问题在于first()first如果查询集中没有匹配的对象,则返回None。你应该改成这样:

events = Event.objects.filter(slug=slug).order_by('id')
if events.exists():
    event = events.first()

我通过在中更改url路径来消除错误通用网址从

url(r'^(?P<slug>[-\w]+)/?$', views.theme, name='theme'),

收件人:

^{pr2}$

之后呢视图.事件以及views.org网站按预期工作。我使用的url配置导致了一个regex问题,导致了底层NoneType错误。我仍然不完全理解正则表达式问题的原因/来源。在

相关问题 更多 >