我编写了一个链接缩短器应用程序,它采用常规的长 url,并创建一个 10 个字符的字母数字字符串,用于使用 Django-1.5.1 进行重定向。
生成的字符串中的重定向链接适用于:url(r'^(?P<short>\w+)/$', 'target'),
但由于某种原因,当我尝试访问其他两个视图(一个用于创建新的短 url,另一个用于查看所有链接)时,我得到一个 404 页面,上面写着“没有迷你匹配给定的查询。” 令人费解的是,当我使用url(r'^$', 'new_link'),
或url(r'^$', 'home'),
这是我的 urls.py 的内容:
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:
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})
我怎样才能解决这个问题?