我必须查看存储在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中提到的术语。在许多书籍中,有人建议我们应该导入视图,但如果您有像我一样的无界代码,则可能会导致错误。
答案 0 :(得分:1)
我不确切地知道调用/ twitter / view的原因,但我可以看到两件事要改变:
关于无限代码,我不知道是否可能导致问题。但是我不明白你为什么要把这些代码放在一边。我不确定该代码何时执行,我猜你第一次调用该文件中的视图并且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包'......
views
文件[view.py
] mkdir views
目录
__init.py__
目录中创建一个views
文件#这就是使目录成为'python包'的原因views.py
移至views
目录。request_view.py
移至views
目录。使用必要的import语句编辑__init__.py
文件。在这种情况下:
from views import answer
from request_view import display_meta
这样做是用目录替换文件。通过将所有内容导入__init__.py
文件,此目录看起来像是代码的大文件,而不是另一个模块。