2013-10-01 94 views
0

大家好,感谢您的阅读!Django - 链接到主页中带有按钮的网页部分

我是Django的一位非常新颖的用户。我决定从我的基本网站转到django,以了解如何使用框架网站。我做了django教程,但是用我的项目......这种方式根本没有麻烦。

让我先简单介绍一下我的项目,以便对整个事情有一个概述。我的基本网页包含主页和部分,您可以在其中更改不同的参数(例如室温)或检查传感器数据。现在,我的主页和温度控制部分正在运行(几件事情要解决,但正确渲染)。我想用主页上的按钮链接每个部分。这是我的主页模板:

{% extends 'base.html' %} 
{% block content %} 
<h1>Here goes a title</h1> 
    <p>A welcome message here...</p> 
    <h2>please select an action</h2>                 
    <div id="column_left" class="column">               
    {% for action in actions_list_left %}              
     <div id="action_box1{{ forloop.counter }}" class="action_box">        
      <input type="button" onclick= " HELP HERE!! "     
      id= "{{ action.action_name }}_sel" class="action_button">        
      <div id="{{ action.action_name }}_desc" class="action_desc">       
       {{ action.description }}               
      </div>                     
     </div> 
    {% endfor %} 
    </div>                       
<!--I ommit the right column, containing more actions...--> 
{% endblock %} 

我想使用我的“动作”模型字段链接到其他部分。我的想法是使用动作名称字段作为该部分的URL(以通用的“模型”方式执行)。例如,如果我的主页位于localhost:8000 /并且操作名称是“temp”,我希望关联的按钮链接到localhost:8000/temp并呈现合适的模板。

因为我觉得是一个urls.py问题,我在这里发布我的网址文件(不含进口线)...

urls.py

admin.autodiscover() 

urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls)),              
    url(r'^$', include('principal.urls')), 
    url(r'^temp/', include('temp.urls')),  
) 

主/ urls.py

urlpatterns = patterns('', 
    url(r'^$', 'principal.views.home', name='home'), 
) 

温度/ urls.py

urlpatterns = patterns('', 
url(r'^$', 'temp.views.index', name='temp_index'), 
    url(r'^(?P<pk>\d+)/$', 
    DetailView.as_view(
     model=Room, 
     template_name='temp/roomTemp.html')), 
) 

我已经试过,我在其他线程读过的一些想法......

{% url temp:index %} 

这一个扔了NoReverseMatch错误......“温度”不是已注册的命名空间。然后,我用Google搜索如何通过这个让我在urls.py改变了这一行:

url(r'^temp/', include('temp.urls', namespace='temp')), 

而且在温度/ urls.py我改了行:

url(r'^$', 'temp.views.index', name='temp'), 

两个网页仍然呈现OK ,但按钮不工作(什么都不做)......它一定很简单,但所有的url对我来说似乎有点棘手(顺便说一下,语法有时像makefile mordor文件:P)。我正在使用Django 1.3

任何帮助将非常感激。此外,任何“良好的Django编码器”的评论或解释将是非常有用的,只是为了不再犯同样的错误!

由于提前,

胡安

编辑: 我在这里发布的代码修复,以防万一有人发现它有用:

<form action="{% url action.action_url %}"> 
    <input type="submit" id="{{ action.action_name }}_sel" value="" class="action_button"> 
    <div id="{{ action.action_name }}_desc" class="action_desc"> 
     {{ action.description }} 
    </div> 
</form> 

回答

0

如果您不需要使用url命名空间,你可以做到这一点

urls.py

admin.autodiscover() 

urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls)),              
    url(r'^$', include('principal.urls')), 
    url(r'^temp/', include('temp.urls')),  
) 

温度/ urls.py

urlpatterns = patterns('', 
url(r'^$', 'temp.views.index', name='temp_index'), 
    url(r'^(?P<pk>\d+)/$', 
     DetailView.as_view(
     model=Room, 
     template_name='temp/roomTemp.html')), 
) 

然后在模板

{% url 'temp_index' %} 

希望它为你工作。

+0

嗨esauro, 首先,感谢您的尝试! 这与我的第一次猜测非常相似......但我很遗憾地说这不起作用。 它返回一个模板语法错误(NoReverseMatch渲染时:反转'temp_index''参数'()'和关键字参数'{}'not found。) – yanyish

+0

您正在使用哪个版本的Django ?.这应该适用于Django> = 1.5。如果您使用的是以前的版本,则需要在{%extends'base.html'%}'后面加入'{%load url from future%}'或删除引号('{%url temp_index%}') – esauro

+1

嗨esauro, 感谢您的帮助。最后我得到了它!我使用的是django 1.3,所以你说的两个选项都适合我。现在我试图使用action.action_name来链接所有部分。一旦完成,我会发布代码,以防其他人感兴趣。 Thx再次。 – yanyish