在Django中实现python类的位置?

Sil*_*ini 5 python django

我正在自学Django,我似乎无法弄清楚我在哪里实现常规Python类.我的意思是,我不知道我写的Python类在哪里.就像他们进入一个单独的文件,然后导入到文件中views.py实现的类或者是在views.py文件中实现的类?

示例我想实现一个Class Alphabet,我应该在模块内部的单独文件中执行此操作还是只实现views.py文件中的函数?

7st*_*tud 5

我不知道我写的Python类去哪里了。就像他们进入一个单独的文件,然后被导入到 views.py。示例我想实现一个类字母表。

这只是让您的导入语句正确的问题:

django_proj1/
   django_proj1/
   myapp/
      myclasses.py
      views.py
Run Code Online (Sandbox Code Playgroud)

那么在你看来:

#myapp/views.py:
from myapp.myclasses import Alphabet
Run Code Online (Sandbox Code Playgroud)

或者,你可以这样做:

django_proj1/
   django_proj1/
      myclasses.py
   myapp/
      views.py
Run Code Online (Sandbox Code Playgroud)

在你看来:

#myapp/views.py:
from django_proj1.myclasses import Alphabet
Run Code Online (Sandbox Code Playgroud)

回复评论:

成功导入类后,如何将属性传递给 HTML 模板?

以下直接来自官方django教程

myapp/views.py

from django.shortcuts import render
from django.http import HttpResponse

from myapp.myclasses import Alphabet  #<*** Import your class.
from django.template import RequestContext, loader  #<*** Import stuff for the template.

# Create your views here.

def index(request):
    alph = Alphabet()
    result = alph.change('hello')  #Your class produces some result here.

    template = loader.get_template("myapp/index.html")
    context = RequestContext(request, {
        'x' : result   #<*** Make a variable named x available in your template.
    })

    return HttpResponse(template.render(context))
Run Code Online (Sandbox Code Playgroud)

directory structure如下所示:

django_proj1/
   django_proj1/
   myapp/
      myclasses.py
      views.py
      templates/  <***Create this directory 
          myapp/  <***Create this directory
             index.html  <***Create this file
Run Code Online (Sandbox Code Playgroud)

myapp/templates/myapp/index.html

{% if x %}
<div>The result you requested was: {{x}}</div>
{% else %}
<div>Sorry, couldn't get the result.</div>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

myapp/myclasses.py

class Alphabet:
    def change(self, word):
        return word + 'Z'
Run Code Online (Sandbox Code Playgroud)

启动服务器

.../my_django_projects/django_proj1$ python manage.py runserver
Run Code Online (Sandbox Code Playgroud)

浏览器中的网址

http://localhost:8000/myapp/
Run Code Online (Sandbox Code Playgroud)

你应该看到:

您请求的结果是:helloZ

如果您注释掉以下行myapp/views.py

    context = RequestContext(request, {
        #'x' : result   #<*** Make a variable named x available in your template.
    })
Run Code Online (Sandbox Code Playgroud)

然后模板会将 的else部分发送index.html到浏览器:

抱歉,无法得到结果。

django_proj1/django_proj1/urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin

from . import views

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'dj1.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),

    url(r'^myapp/', include('myapp.urls')),

)
Run Code Online (Sandbox Code Playgroud)

django_proj1/myapp/urls.py:

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
]
Run Code Online (Sandbox Code Playgroud)