【问题标题】:Import a class into the urls.py in Django将一个类导入 Django 中的 urls.py
【发布时间】:2017-09-22 03:02:37
【问题描述】:

在过去的几周里,我从开发一个处理简单 XML 文件、然后将其内容写入 Oracle DB (cx_Oracle) 并以 HTML 输出的应用程序转变为使用 Django 框架。 Django 框架切换不是必需的,但既然我有机会使用 Django 开发一些东西,我想为什么不呢,因为它对我来说是一个新领域,不会损坏我的简历。

无论如何,在从views.py 文件导入类时,我不知道在我的 urls.py 文件中写入什么内容。以下是当前内容:

urls.py

from myproj.views import Pymat_program

pymatProgram = Pymat_program()

urlpatterns = (
    url(r'^pymat/$', pymatProgram.abc),
)

views.py

class Pymat_program:
    def abc(self, request):
        test = "<html><body>Random text.</body></html>"

        return HttpResponse(test)

我尝试了使用请求的各种排列,不使用请求,以及如何在 url 元组中调用类,但都无济于事。当我使用类之外的定义(即不在任何类中)时,它会正确显示在 HTML 中。

【问题讨论】:

  • 出于好奇,这会产生什么错误?

标签: python django cx-oracle


【解决方案1】:

您不想将程序包装在一个类中。 (一般来说,在 Python 中,您应该像对待模块一样对待模块,例如,Java 可能只对待具有静态成员的类。)

实际上有两种方法:

基于功能的视图

urls.py

from myproj.views import abc_view

urlpatterns = (
    url(r'^pymat/$', abc_view),
)

views.py

def abc_view(request):
    test = "<html><body>Random text.</body></html>"
    return HttpResponse(test)

基于类的视图

urls.py

from myproj.views import AbcView

urlpatterns = (
    url(r'^pymat/$', AbcView.as_view()),
)

views.py

from django.views.generic import View

class AbcView(View):
    def get(self, request, *args, **kwargs):
        test = "<html><body>Random text.</body></html>"
        return HttpResponse(test)

【讨论】:

  • 超级好用!我使用了基于类的视图,因为我想执行一些其他的东西,这些东西最好在同一个类中拆分成单独的方法。功能视图有效,但仅限于我的任务。
【解决方案2】:

由于您在 Django 中使用基于类的视图,因此您必须在 URL 中调用此类:

from myproj.views import Pymat_program

pymatProgram = Pymat_program()

urlpatterns = (
    url(r'^pymat/$', pymatProgram.as_view()),
)

然后在类中使用 get 或 post 方法名称,例如:

class Pymat_program:
    model = ModelName

    def post(self, request, *args, **kwargs):
        ....

第二种方法是使用基于函数的视图:

urls.py

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^articles/2003/$', views.view_name),
]

views.py

from django.http import HttpResponse
import datetime

def view_name(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)

更多详情请查看class based views docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 2013-10-28
    • 2012-07-11
    相关资源
    最近更新 更多