【问题标题】:Django-reverse URL'sDjango 反向 URL
【发布时间】:2015-01-07 07:09:56
【问题描述】:

我正在尝试使用 Django 表单。我正在尝试创建一个表单,该表单将接受城市名称作为输入并输出坐标作为输出。我的应用程序名称是 rango。在接受输入后,我在 URL 反向方面遇到了很多麻烦的形式..

我的项目/urls.py:

from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.conf import settings
import os

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'mysite.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

      url(r'^admin/', include(admin.site.urls)),
      url(r'^rango/',include('rango.urls', namespace="rango")),
)


if settings.DEBUG:
    urlpatterns += patterns(
        'django.views.static',
        (r'media/(?P<path>.*)',
        'serve',
        {'document_root': settings.MEDIA_ROOT}), )

我的 rango/urls.py:(rango 是应用程序的名称)

from django.conf.urls import patterns, url
from rango import views

urlpatterns = patterns('',
        url(r'^welcome/$', views.index, name='index'),
        url(r'^about/$', views.about, name='about_page'),
        url(r'^categories/(?P<name_dir>\w+)/$',views.cats,name='cats'),
        url(r'^disp_page/(?P<city>\w+)/$',views.geo,name='coods'),
        url(r'^disp_page/$', views.disp_page, name='disp_page')

我的forms.py:

从 django 导入表单 from rango.models 导入页面,类别

class PageForm(forms.ModelForm):
    title = forms.CharField(max_length=128, help_text="Please enter the name of the city.")
    #url = forms.URLField(max_length=200, help_text="Please enter the URL of the page.")
    #views = forms.IntegerField(widget=forms.HiddenInput(), initial=0)

    class Meta:
        # Provide an association between the ModelForm and a model
        model = Page
        exclude = ('category','url','views')

我的意见.py:

from django.shortcuts import render
from django.http import HttpResponse

from django.template import RequestContext
from django.shortcuts import render_to_response
from rango.models import Category,Page
from pygeocoder import Geocoder
from rango.forms import PageForm
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse

import operator
# Create your views here.




def geo(request,city):
    context = RequestContext(request)

    citydata=Geocoder.geocode(city)
    codtuple=citydata[0].coordinates
    codtuple=list(codtuple)
    context_dict = {'cood':codtuple}

    return render_to_response('coods.html',context_dict,context)



def disp_page(request):
    # A HTTP POST?
    if request.method == 'POST':
        form = PageForm(request.POST)

        # Have we been provided with a valid form?
        if form.is_valid():
            # Save the new category to the database.
            #form.save(commit=True)
            city = form.cleaned_data['title']


           # context = RequestContext(request)

            #citydata=Geocoder.geocode(cityname)
            #codtuple=citydata[0].coordinates
            #codtuple=list(codtuple)
            #context_dict = {'cood':codtuple}


            return HttpResponseRedirect(reverse('rango:geo', args=(request,city)))


        else:
            # The supplied form contained errors - just print them to the terminal.
            print form.errors
    else:
        # If the request was not a POST, display the form to enter details.
        form = PageForm()

    # Bad form (or form details), no form supplied...
    # Render the form with error messages (if any).
    return render(request, 'disp_page.html', {'form': form})

基本上 disp_page 显示表单。我在表单中输入一个城市的名称(EX:NEWYORK),然后它必须重定向到我的 views.py 中的“geo”函数,该函数将输出坐标不同的观点。这种重定向似乎没有发生-感谢任何帮助!

【问题讨论】:

  • 您没有名为geo的命名网址。
  • @limelights...我是否将 url(r'^disp_page/(?P\w+)/$',views.geo,name='coods') 更改为跨度>
  • return HttpResponseRedirect(reverse('rango:geo', args=(request,city))) 更改为return HttpResponseRedirect(reverse('rango:coods', args=(request,city)))
  • @limelights...仍然不起作用..:(..我不断收到“NoReverseMatch at /rango/disp_page/”错误
  • @limelights...得到它的工作!...谢谢... 1.我必须参考你所说的网址名称。 2.args(city,) 不是 args(request,city) 因为 city 是我通过的唯一参数

标签: python django url url-redirection


【解决方案1】:

改变这一行

url(r'^disp_page/(?P<city>\w+)/$',views.geo,name='coods'),

rango/urls.py 到:

url(r'^disp_page/(?P<city>\w+)/$',views.geo,name='geo'),

并使用:

return HttpResponseRedirect(reverse('rango:geo', args=(city,)))

【讨论】:

    猜你喜欢
    • 2010-11-16
    • 2023-03-25
    • 2019-11-04
    • 1970-01-01
    • 2012-12-05
    • 2018-05-19
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多