Django:get_object_or_404不返回现有对象

时间:2014-03-11 20:54:50

标签: python django sqlite resolve

我希望对Django有更多了解的人能说出可能发生的事情,因为我觉得我已经检查了所有内容并且无法理解它。

我有一个简单的视图,它可以很好地工作,根据网址中的唯一字符串检索条目:

# urls.py
urlpatterns = patterns('',
    # ...
    # url(r'^bib/(?P<unique_str>\w+-\w+-\d+)/(?P<slug>[\w\d-]+)$', 'nl.views.text_detail', name='text_detail'),
    # ...
    )


# views.py
import myapp.models
import django.shortcuts

def text_detail(request, unique_str, slug):
    entry= django.shortcuts.get_object_or_404(myapp.models.Entry, unique_str=unique_str)
    return django.shortcuts.render(request, 'mytemplate.html', {'entry': entry,})

但是,当我在具有完全相同参数的另一个视图中调用完全相同的函数时,它会引发Http404。 (当我运行Entry.objects.get(unique_str=unique_str)方法时,它会引发模型的DoesNotExist异常。)

该视图是一个AJAX视图,可以使用简单的URL访问,并接受包含URL的已发布JSON数据。根据传递的URL,我想检索相关的Entry并对其进行一些处理。

给定一个可以在浏览器中很好地显示text_detail视图的url,下面的视图在get_object_or_404()上失败:

# urls.py
urlpatterns = patterns('',
    # ...
    # url(r'^sendurl/$', 'nl.views.sendurl', name='sendurl'),
    # ...
    )

# views.py
import json
from django.core.urlresolvers import resolve
import django.shortcuts
import myapp.models


def sendurl(request):
    if request.is_ajax():
        data = json.loads(request.POST['jsonData'])
        url = data['url']

        resolvermatch = resolve(url)
        if resolvermatch.view_name == 'text_detail':
            unique_str = resolvermatch.kwargs['unique_str']
            slug = resolvermatch.kwargs['slug']

            # When I put these lines, it actually prints out the HTML of the text_detail view:
            # response = nl.views.text_detail(request, unique_str, slug)
            # print response

            # But this fails:
            entry = django.shortcuts.get_object_or_404(myapp.models.Entry, unique_str=unique_str)

            # Do Entry processing
            # entry.save()

        else ... :
            # ...

    else:
        raise Http404

这怎么可能?

我正在使用Django 1.6和SQLite数据库(正在开发中)。

提前多多感谢!

0 个答案:

没有答案