2012-08-22 38 views
6

Tôi đang cố gắng thực hiện một số kết hợp URL Django.URL Django, sử dụng? trong URL

tôi muốn có một vài url nơi mà tôi có http://mysite.com/base?sort=type1/, http://mysite.com/base?sort=type2/ vv

tôi không thể tìm ra cách để URL phù hợp với các biểu thức: Tôi rất mới để Django và không bao giờ sử dụng Reg Ex trước.

Những gì tôi có cho urls.py trong tôi "cơ sở" áp dụng là:

url(r'^$','base.views.main, name='main'), 

tôi không thể tìm ra những gì để đặt cho phù hợp với các url của tôi với dấu hỏi.

Tôi đang cố gắng một cái gì đó giống như

url(r'^?sort=popular/$', 'base.views.main_popular', name='main_popular'), 

Nhờ sự giúp đỡ!

Trả lời

6

? sẽ không khớp với "?" bên trong url, thay vào đó nó có ý nghĩa riêng mà bạn có thể tra cứu ở đây:
Python Regular Expressions Nếu bạn muốn khớp chính xác với ký tự "?" bên trong url của bạn, bạn phải bằng cách nào đó thoát khỏi nó (vì nó có ý nghĩa trong RegExs) vì vậy bạn có thể muốn thoát nó bằng dấu "\" (dấu gạch chéo ngược) để bạn có thể viết \? sort ....

EDIT:
Đồng ý với những gì bạn đã nói trong phần nhận xét, có vẻ như đây là vấn đề của bạn, main?sort=popular xảy ra trên mẫu url của bạn khi bạn kết xuất mẫu cho /main/ với đối số từ điển GET từ sort=popular, chỉ cần viết một chức năng phân biệt giữa GETPOST, trong phần GET, có sth như sort_by = request.GET.get('sort','') và sau đó sắp xếp tương ứng với giá trị của biến sort_by, sẽ là sth như:

def main_handler(request): 
    if request.method == "POST": 
      whatever ... 
    if request.method == "GET" : 
      sort_by = request.GET.get('sort','') 
      if sort_by: 
       sort by what sort points to 
       return "the sorted template" 
    return render_to_response(the page and it's args) 

và bỏ qua điều đó? bên trong mẫu url, được thêm khi bạn yêu cầu một trang có đối số GET.

+0

Tôi đã thử làm điều này, thật không may là nó không thực sự hoạt động - tôi không hoàn toàn chắc chắn tại sao. – deakolt

+0

bạn cũng có thể muốn đăng mã đó? nhưng thực sự, có vẻ kỳ lạ khi có dấu chấm hỏi ở đầu url như vậy (sắp xếp = phổ biến) – SpiXel

+0

Về cơ bản tôi có một trang web, với nội dung có thể được sắp xếp dựa trên sắp xếp. chính? sort = phổ biến loại ngụ ý rằng bạn vẫn còn trên trang chính, vs chính/phổ biến/mà loại ngụ ý một trang khác nhau. Tôi đã sử dụng url (r '^ \? Sort = popular/$', 'base.views.main_popular', name = 'main_popular') – deakolt

7

Bạn không khớp các mã này với regex. Các phần tử sau ? không phải là một phần của URL, chúng là các tham số truy vấn có thể được truy cập từ chế độ xem của bạn qua request.GET.

+0

Ahh Tôi thực sự là một người lập trình web, cảm ơn bạn-- – deakolt