我试图用Django编写电子短语,以帮助人们学习语言。或者实际上是具有新功能的旧版本的新版本。无论如何,我在这里的第一米处严重受伤。
我已经在数据库中添加了一些对象,并希望在"类别"中显示它们。网址。第一个网址http://127.0.0.1:8000/效果很好,给了我一个美妙的问候世界。但是,我需要将新应用程序连接到项目,当我尝试打开应用程序http://127.0.0.1:8000/categories/的网址时,浏览器会给我这样的信息:
TypeError at /categories/
sequence item 0: expected str instance, Category found
我的控制台抱怨应用程序的view.py,并在第9行output = ', '.join(categories)
内。我发现它没有任何问题。这是整个views.py:
from django.http import HttpResponse
from django.shortcuts import render
from .models import Category
def category_list(request):
categories = Category.objects.all()
output = ', '.join(categories)
return HttpResponse(output)
这是应用的url.py:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.category_list),
]
这是主要的url.py:
from django.conf.urls import url, include
from django.contrib import admin
from . import views
urlpatterns = [
url(r'^categories/', include('phrasebooktwo.urls')),
url(r'^admin/', admin.site.urls),
url(r'^$', views.hello_world),
]
这是项目树:
bigboy_phrasebook
├── bigboy_phrasebook
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-35.pyc
│ │ ├── settings.cpython-35.pyc
│ │ ├── urls.cpython-35.pyc
│ │ ├── views.cpython-35.pyc
│ │ └── wsgi.cpython-35.pyc
│ ├── settings.py
│ ├── urls.py
│ ├── views.py
│ └── wsgi.py
├── db.sqlite3
├── manage.py
└── phrasebooktwo
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-35.pyc
│ ├── admin.cpython-35.pyc
│ ├── models.cpython-35.pyc
│ ├── urls.cpython-35.pyc
│ └── views.cpython-35.pyc
├── admin.py
├── apps.py
├── migrations
│ ├── 0001_initial.py
│ ├── __init__.py
│ └── __pycache__
│ ├── 0001_initial.cpython-35.pyc
│ └── __init__.cpython-35.pyc
├── models.py
├── tests.py
├── urls.py
└── views.py
如何让我的类别页面正常工作?在此先感谢您的帮助。
答案 0 :(得分:1)
在使用join()之前,必须使用 str ()或 repr ()或在categories对象上返回字符串的任何其他方法。让我用一个简单的例子解释一下:
class Category:
def __init__(self, name):
self.name = name
items = [Category('jam')]
out = ', '.join(items)
print(out)
如果您运行此代码,您将得到" TypeError:序列项0:预期的str实例,找到的类别"
所以,你必须修改如下代码:
class Category:
def __init__(self, name):
self.name = name
def __str__(self):
return self.name
items = [Category('jam').__str__()]
out = ', '.join(items)
print(out)
答案 1 :(得分:1)
def category_list(request):
categories = Category.objects.all()
output = ', '.join(categories)
return HttpResponse(output)
此处categories
为queryset
对象因此,当您添加此join
方法时,它会从instance
迭代为queryset
,而instance
是对象模型。那么 concat 与join
方法不起作用。在连接方法中使用str方法,如下所示
def category_list(request):
categories = Category.objects.all()
output = ', '.join(str(categories))
return HttpResponse(output)
答案 2 :(得分:0)
def category_list(request):
categories = Category.objects.all()
output = ', '.join([str(category) for category in categories])
return HttpResponse(output)
现在它有效。我必须记得将来看完这些视频。