正确存储Django中URL中传递的值

时间:2012-09-20 16:54:24

标签: django

我有以下网址:

http://localhost:8000/store/add/?points=5

我想从我的网址中提取点数。

在我的views.py中,我有:

points = request.GET.get('points',0)

问题是它永远不会找到点,所以它使用默认值0。

对我做错的任何见解?

我的urls.py

from django.conf.urls.defaults import *
from store.models import Part, Category, UniPart, LibraryRequest
from django.views.generic.list_detail import object_list
from voting.views import vote_on_object


urlpatterns=patterns('',
#/store/
url(r'^$','store.views.all_models',name="all_models"),
#/integer/view_part
url(r'^(\d+)/view_part/$','store.views.view_part',name="view_part"),
url(r'^your_models/$','store.views.your_models',name="your_models"),#/your_model
url(r'^user_models/(?P<username>\w+)/$','store.views.user_models',name="user_models"),
url(r'^add/(?P<points>\d+)/','store.views.add_model'),

views.py剪掉:

def add_model(request, points=None):
    print points

2 个答案:

答案 0 :(得分:3)

好吧,您的urls.py表示您应该使用以下网址/store/add/5,并且在views.py中您需要查看

def add_model(request, points=None):
    print points

如果您希望points作为GET参数,请更改urls.py,如下所示:

url(r'^add$','store.views.add_model', name='add_model'),

然后您可以将points作为/store/add?points=5传递并从网址中提取

points = request.GET.get('points')

<强>更新 此外,为避免出现此类问题,我建议您在name(见上文)的路线中添加urls.py参数,并在视图中使用reverse(例如reverse('add_model', kwargs={'points': 5} )和模板中的url(例如{% url 'add_model' 5 %}

在这种情况下,应用程序中的所有网址都会根据urls.py文件中的路由自动生成。

答案 1 :(得分:1)

使用以下代码:

points = request.GET.get('points')

如果要传递多个变量,可以通过两种方式完成:

方法1:

urls.py

(r'^store/add1/?integer=(?P<category>\d+)/?string=(?P<keyword>\w+)$', 'view_function_name'),

您可以使用以下内容在视图中获取上述值:

def function_name(request):
    int_value = request.GET.get('integer')
    str_value = reuest.GET.get('string')

您还可以使用下面给出的模式:

方法2:

urls.py

urlpatterns = patterns('model_name.views', 
      (r'^store/add1/(?P<integer>\d+)/(?P<string>\w+)/', 'function_name')
      )

views.py

def function_name(request, integer= None, string = None):
    print integer
    print string
    #Do whatever you wish with this value

第二种方法对你来说更容易。