Django运行错误的视图方法

时间:2013-03-06 07:37:36

标签: django django-views

我必须查看存储在mysite文件夹中的文件。一个命名为views.py,另一个命名为request_view.py。在urls.py中,我使用了views.view的'answer'方法和request_view.py的'display_meta'方法。

(django版本:1.5和python版本:2.7.3)

这是网址格式:

url(r'^twitter/$', answer), url(r'request/$', display_meta)

当我拨打http:/127.0.0.1:8000 / request /时,还会先调用第一个视图(即/ twitter /)!

任何帮助?

还有一件事。在我的view.py中,我有一些无界代码(即代码既不存在于方法或类中)。这可能是问题的原因吗?

l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
stream = Stream(auth, l)
keyword = input('enter the keyword you want to search for?')
stream.filter(track = [keyword])

除了这段代码之外,evry代码可以在类或方法中。

我注意到的一件事是,首先运行view.py的代码,然后运行display_meta。

提前致谢。

解决

问题出在我使用的导入功能上。由于我的代码在其中一个视图中无限制,导入函数总是导入,无论我选择哪个url。

建议

始终使用此example中提到的术语。在许多书籍中,有人建议我们应该导入视图,但如果您有像我一样的无界代码,则可能会导致错误。

3 个答案:

答案 0 :(得分:1)

我不确切地知道调用/ twitter / view的原因,但我可以看到两件事要改变:

  1. 你应该使用一个字符串作为url()的第二个参数,你可以在这个例子中看到[1]。您可以使用'myapp.views.my_method'命名法。
  2. 您忘记使用^来启动请求网址,指示网址的开头。
  3. 关于无限代码,我不知道是否可能导致问题。但是我不明白你为什么要把这些代码放在一边。我不确定该代码何时执行,我猜你第一次调用该文件中的视图并且Django加载文件(我猜,我不确切),但我认为不会这是一个很好的方法。想想你何时想要执行该代码,将其放入方法中并调用它。

    [1] https://docs.djangoproject.com/en/1.5/topics/http/urls/#example

答案 1 :(得分:0)

HI hemant我想知道为什么你写了request_view.py.

请参阅django文档。

你能做的就是。

在您的views.py中创建两个功能

def answer(request):

   do some stuffs.

   render_to_response(template.html)

并在同一页面上写下另一个

def display_meta(request):

   # do your studd
   render_to_response(some.html)

您不需要创建两个单独的VIEWS.PY

我不知道这段代码的作用

l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
stream = Stream(auth, l)
keyword = input('enter the keyword you want to search for?')
stream.filter(track = [keyword])

但是如果您想在功能中使用StdOutListener,可以在视图中调用

喜欢

def display_meta(request):
   stobject  = StdOutListener()  # use parameters if you have here 
   # do your studd
   render_to_response(some.html)

答案 2 :(得分:0)

将视图组织到python包中可以解决这个问题。所以如果你有这样的结构......

# views.py
def SomeView(request):
    return HttpResponse('SomeView')

# another_view.py
def AnotherView(request):
    return HttpResponse('AnotherView')

您可以将这些单独的视图文件重新组织到视图包中。那是......

# views
    # __init__.py
    from views import SomeView
    from another_view import AnotherView

    # views.py
    def SomeView(request):
        return HttpResponse('SomeView')

    # another_view.py
    def AnotherView(request):
        return HttpResponse('AnotherView')

现在,所有东西都可以用django标准方式调用:

url(r'^url-to-some-view/$', 'views.SomeView'),
url(r'^url-to-another-view/$', 'views.AnotherView'),

更新:

制作'python包'......

  1. 创建与views文件[view.py]
  2. 相同级别的mkdir views目录
  3. __init.py__目录中创建一个views文件#这就是使目录成为'python包'的原因
  4. views.py移至views目录。
  5. request_view.py移至views目录。
  6. 使用必要的import语句编辑__init__.py文件。在这种情况下:

    from views import answer
    from request_view import display_meta
    
  7. 这样做是用目录替换文件。通过将所有内容导入__init__.py文件,此目录看起来像是代码的大文件,而不是另一个模块。