在Django中在哪里实现python类?

在Django中在哪里实现python类?,python,django,Python,Django,我自己在学习Django,似乎不知道我在哪里实现了一个常规的Python类。我的意思是,我不知道我写的Python类去了哪里。就像它们放在一个单独的文件中,然后导入到views.py中,或者类是在views.py文件中实现的 示例我想实现一个类字母表,我应该在模块内的单独文件中实现还是只实现views.py文件中的函数 我不知道我编写的Python类去了哪里。就像他们进去一样 一个单独的文件,然后导入到views.py。 示例我想实现一个类字母表 这只是让您的导入声明正确的问题: django_

我自己在学习
Django
,似乎不知道我在哪里实现了一个常规的Python类。我的意思是,我不知道我写的Python类去了哪里。就像它们放在一个单独的文件中,然后导入到
views.py
中,或者类是在
views.py
文件中实现的

示例我想实现一个
类字母表
,我应该在模块内的单独文件中实现还是只实现
views.py
文件中的函数

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

这只是让您的导入声明正确的问题:

django_proj1/
   django_proj1/
   myapp/
      myclasses.py
      views.py
那么在你看来,

#myapp/views.py:
from myapp.myclasses import Alphabet
#myapp/views.py:
from django_proj1.myclasses import Alphabet
或者,你可以这样做:

django_proj1/
   django_proj1/
      myclasses.py
   myapp/
      views.py
django_proj1/
   django_proj1/
   myapp/
      myclasses.py
      views.py
      templates/  <***Create this directory 
          myapp/  <***Create this directory
             index.html  <***Create this file
在你看来:

#myapp/views.py:
from myapp.myclasses import Alphabet
#myapp/views.py:
from django_proj1.myclasses import Alphabet
评论回复:

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
]

在我成功导入我的类之后,我如何通过 HTML模板的属性

以下是直接来自官方的消息

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))
{% if x %}
<div>The result you requested was: {{x}}</div>
{% else %}
<div>Sorry, couldn't get the result.</div>
{% endif %}
class Alphabet:
    def change(self, word):
        return word + 'Z'
.../my_django_projects/django_proj1$ python manage.py runserver
http://localhost:8000/myapp/
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')),

)
myapp/templates/myapp/index.html

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))
{% if x %}
<div>The result you requested was: {{x}}</div>
{% else %}
<div>Sorry, couldn't get the result.</div>
{% endif %}
class Alphabet:
    def change(self, word):
        return word + 'Z'
.../my_django_projects/django_proj1$ python manage.py runserver
http://localhost:8000/myapp/
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')),

)
启动服务器

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))
{% if x %}
<div>The result you requested was: {{x}}</div>
{% else %}
<div>Sorry, couldn't get the result.</div>
{% endif %}
class Alphabet:
    def change(self, word):
        return word + 'Z'
.../my_django_projects/django_proj1$ python manage.py runserver
http://localhost:8000/myapp/
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')),

)
浏览器中的url

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))
{% if x %}
<div>The result you requested was: {{x}}</div>
{% else %}
<div>Sorry, couldn't get the result.</div>
{% endif %}
class Alphabet:
    def change(self, word):
        return word + 'Z'
.../my_django_projects/django_proj1$ python manage.py runserver
http://localhost:8000/myapp/
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')),

)
你应该看到:

你要求的结果是:你好

如果在
myapp/views.py中注释掉以下行:

    context = RequestContext(request, {
        #'x' : result   #<*** Make a variable named x available in your template.
    })
django_proj1/myapp/url.py:

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
]

Django最终只是Python

您可以在项目中的任何位置创建新模块,并将它们导入到视图、模型、URL等中。这通常是组织常规UTIL(utils.py)的方式

您可以通过几种方式将数据传递到视图,例如:

from your_module import some_object

class MyView(TemplateView):
    template_name = 'some_template.html'

    def get_context_data(self, **kwargs):
        context = super(MyView, self).get_context_data(**kwargs)
        context['my_data'] = some_object.some_method()
        return context

some_template.html
{{{my_data}}

中,它取决于字母表类的范围。例如,如果它是一个实用类,那么我建议将其放入utils.py文件中。但是在views.py文件中有类是完全可以的,主要是那些处理UI处理的类。由你决定

与类似的框架不同,您可以将Python代码放在项目中的任何位置,前提是您以后可以通过导入路径引用它们(不过,模型类部分是一个例外):

  • 应用程序由其导入路径(或
    AppConfig
    import路径)引用。尽管有一些魔法涉及到
    test.py
    models.py
    ,但大多数时候导入/引用是非常明确的
  • 视图由
    url.py
    文件引用,但作为常规python导入路径导入
  • 中间件由字符串引用,这些字符串表示以其类名结尾的导入路径
  • 通常不配置的其他设置也是完整导入路径
  • 这种明确性的例外情况是:

  • models.py、test.py、admin.py:它们有特殊用途,可能不存在,提供:

  • 您的应用程序中不需要任何型号,并将在安装的应用程序中提供一个
    AppConfig
    (而不仅仅是应用程序名称)
  • 您的应用程序中的管理员类将不依赖自动发现
  • 您不想在应用程序上进行测试,或者将为特定于应用程序的测试命令运行指定非默认路径
  • 模板和静态文件:您的项目将依赖于每个应用加载程序加载您的静态文件和模板文件,最终在您的每个应用程序中都会进行暴力搜索:搜索它们的内部
    static/
    templates/
    目录(如果存在)


  • 其他一切都是普通的python代码如果需要从任何视图导入它们,只需为它们执行一个普通的导入语句(因为视图代码是通过普通的python导入机制导入的)。

    将其放在django能找到的任何地方。我经常有一个通用实用程序的utils模块。谢谢你的回答!但是如果我把它放在一个单独的文件中,然后导入它,我如何在HTML模板中打印属性?我知道,通过views.py中的函数,我必须返回请求和模板名称。然而,我似乎无法将属性“传递”到模板页面。
    返回render\u to\u response('my\u page.html',template\u values\u dict,…)
    在我成功导入类之后,如何将属性传递到html模板?我是否使用render()或render_to_响应返回views.py中创建的类的对象?检查我的答案,了解如何执行this@Silvestrini,请参见我答案底部的回答。