0

我必须查看存储在 mysite 文件夹中的文件。一个命名为views.py,另一个命名为request_view.py。在 urls.py 中,我对 views.py 使用了 '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])

除了这段代码,每个代码要么在类中,要么在方法中。

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

提前致谢。

解决了

问题出在我使用的导入功能上。由于我的代码在其中一个视图中是无界的,因此无论我选择什么 url,导入函数总是会导入它。

建议

始终使用本示例中提到的命名法。在许多书中都建议我们应该导入视图,但如果你有像我这样的无限代码,它可能会导致错误。

4

3 回答 3

1

我不确切知道为什么调用 /twitter/ view,但我可以看到有两件事要改变:

  1. 您应该使用字符串作为 url() 的第二个参数,如本例 [1] 中所示。您可以使用“myapp.views.my_method”命名法。
  2. 您忘记使用 ^ 开始请求 URL,该 ^ 表示 URL 的开始。

关于无界代码,我不知道这是否会导致问题。但我不明白你为什么要无限地放那个代码。我不确定何时执行该代码,我猜你第一次在该文件中调用视图并且 Django 加载该文件(我猜,我不知道确切),但我不认为那会是一个很好的方法来做到这一点。想想你什么时候想执行那个代码,把它放在一个方法中,然后调用它。

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

于 2013-03-06T16:38:15.683 回答
0

嗨 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)
于 2013-03-06T07:44:54.753 回答
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目录 [ mkdir views]
  2. 在目录中创建一个__init.py__文件views# 这就是使目录成为“python 包”的原因
  3. 进入目录views.pyviews
  4. 将您的移动request_view.pyviews目录中。
  5. __init__.py使用必要的导入语句编辑文件。在这种情况下:

    from views import answer
    from request_view import display_meta
    

这样做是用目录替换文件。通过将所有内容导入__init__.py文件中,该目录对于您的代码来说就像一个大文件,而不是另一个模块。

于 2013-03-06T15:06:29.197 回答