2013-10-01 93 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