2013-06-07 1 views
2

내가 정기적으로 긴 URL 연결되는 링크 - 축약 서비스 응용 프로그램을 쓴 주어진 쿼리와 일치하고, 장고-1.5.1로 재 지정에 사용하는 10 영숫자 문자열을 만듭니다. 나는 404 페이지의 말을 얻을 내가 다른 두 개의 뷰에 액세스하려고 (새로운 짧은 URL을 생성하는 하나 하나가 모든 링크를 볼 때) "url(r'^(?P<short>\w+)/$', 'target'),하지만 몇 가지 이유 : 생성 된 문자열에서
리디렉션 링크와 함께 잘 작동 주어진 검색어와 일치하는 미니가 없습니다. "장고 없음 미니

from django.conf.urls import patterns, url 

urlpatterns = patterns('mini_url.views', 
    url(r'^(?P<short>\w+)/$', 'target'), 
    url(r'^new_link/$', 'new_link'), 
    url(r'^home/$', 'home'), 
) 

및 views.py : 수수께끼 것은 내가 url(r'^$', 'new_link'), 또는 여기

url(r'^$', 'home'),가 내 urls.py의 내용입니다 사용할 때 모든 것이 잘 작동한다는 것입니다

from django.shortcuts import render, get_object_or_404, redirect 
from mini_url.models import Mini 
from mini_url.forms import MiniForm 
import string, random 

def generate(N): 
    characters = string.letters + string.digits 
    random_list = [random.choice(characters) for _ in xrange(N)] 
    return ''.join(random_list) 

def new_link(request): 
    if request.method == 'POST': 
     form = MiniForm(request.POST) 

     if form.is_valid(): 
      create = True 
      link = form.save(commit=False) 
      short_url = generate(10) 
      link.short_url = short_url 
      link.save() 
      link_string = "http://localhost:8000/m/%s/" % short_url 

    else: 
     form = MiniForm() 

    return render(request, 'mini_url/new_link.html', locals()) 


def target(request, short): 
    short_link = get_object_or_404(Mini, short_url = short) 
    short_link.counter += 1 
    short_link.save() 
    return redirect(short_link.long_url) 

def home(request): 
    links = Mini.objects.order_by('counter') 
    return render(request, 'mini_url/home.html', {'links':links}) 

어떻게 할 수 이것을 고쳐라?

+0

난 괜찮아가 작동 urlpatterns에 '^ $'연구에 매핑 한 다음 하나를 생성하고 데이터베이스에 추가하여 새로운 URL을 생성하기 위해 페이지에 액세스 할 수 있습니다 = '8OA1Ys97rR') 은 <미니 : http://stackoverflow.com/questions/16987392/django-no-mini-matches-the-given-query>', 문제는 내가 원한다면 페이지를 액세서 수 없다 r '을 통해 이동하려면^new_link/$' – dPhilGuy

+0

URL 순서를 변경하십시오. 괜찮아 질 것입니다. – karthikr

답변

2

문제는 URL의 패턴입니다. 순서를 변경하면 제대로 작동합니다.

변경 주문 : 당신이 여기 /home 또는 /new_link

을 수행 할 때 URL 패턴 일치에 대한 정규식 \w+이기 때문에

urlpatterns = patterns('mini_url.views', 
    url(r'^new_link/$', 'new_link'), 
    url(r'^home/$', 'home'), 
    url(r'^(?P<short>\w+)/$', 'target'), 
) 

의 URL 목표는 url(r'^(?P<short>\w+)/$', 'target'), 첫번째 일치합니다, 그리고 부를 것이다 매개 변수가 new_link 또는 hometarget을 확인하십시오. 그러므로 문제.

+0

감사합니다. – dPhilGuy

0

문제는 "new_link"와 "홈"모두 short_link 뷰의 정의와 일치한다는 것입니다, 그래서 그들은 해당 페이지에 대한 호출로 해석되고있다. short_link는 맨 아래로 이동해야하므로 다른 사람이 없을 때만 일치합니다. `>>> Mini.objects.get (SHORT_URL을 :