2011-09-28 47 views
40

Tôi khá mới với django nhưng có kinh nghiệm trong Python và lập trình web java với các khung công tác khác nhau. Tôi đã làm cho bản thân mình một ứng dụng django ít tốt đẹp, nhưng tôi không thể dường như làm cho nó phù hợp với www.mysite.com như trái ngược với www.mysite.com/myapp.URL Django, cách ánh xạ gốc tới ứng dụng?

Tôi đã xác định các url và chế độ xem trong url urls.conf của mình hiện không được tách riêng khỏi ứng dụng (đừng bận tâm đến điều đó).

urlpatterns = patterns('myapp.views', 
    (r'^myapp/$', 'index'), 
    (r'^myapp/(?P<some_id>\d+)/global_stats/$', 'global_stats'), 
    (r'^myapp/(?P<some_id>\d+)/player/(?P<player_id>\d+)/$', 'player_stats'), 
) 

Tất cả điều này hoạt động như một sự quyến rũ. Nếu ai đó truy cập www.mysite.com/myapp, họ sẽ nhấn vào chế độ xem chỉ mục của tôi, điều này gây ra chuyển hướng http đến url mặc định "chính xác" của tôi.

Vì vậy, làm cách nào để thêm mẫu sẽ giống như (r '^ myapp/$', 'index') nhưng không có/myapp - nghĩa là, www.mysite.com phải đủ?

tôi sẽ nghĩ rằng đây sẽ là công cụ rất cơ bản ... Tôi cố gắng thêm một dòng như:

(r'^$', 'index'), 

tuy nhiên điều này ném cho tôi trong một vòng lặp ...

Hy vọng bạn django rất kinh nghiệm trên mạng có thể làm rõ điều này cho tôi!

Trả lời

53

Điều này có vẻ kỳ lạ.

nỗ lực của bạn mới nhất nên làm việc, nhưng những gì tôi thường làm - đặt

urlpatterns = patterns('', 
    (r'^$', lambda r: HttpResponseRedirect('myapp/')), 
    ... 
) 

này quy mô tốt hơn khi bạn bắt đầu thêm các ứng dụng mới.

+0

Vâng, đối với một số lý do công trình này, và giải pháp của tôi không - dính bệnh như vậy với này !! :) – Hoof

+0

nếu bạn gửi cho tôi gzip với ứng dụng tối thiểu của bạn, tôi có thể thấy có gì sai với nó. BTW, từ tập tin khác nhau của tôi: urlpatterns = patterns ('common.views', url ('^ $', 'home', name = 'home'), ...), hoạt động tốt – Guard

+0

Điều này cực kỳ tốt, vì nó đảm bảo người dùng kết thúc tại URL thực/'chính xác' cho ứng dụng, thay vì âm thầm ngụ ý nó thực sự nằm ở gốc. –

4

Chỉ cần đặt một biểu thức chính quy thô trống: r ''

Tôi đã thử nghiệm ở đây và nó hoạt động hoàn hảo.

urlpatterns = patterns('', 
    url(r'', include('homepage.urls')), 
    url(r'^homepage/', include('homepage.urls')), 
    url(r'^admin/', include(admin.site.urls)), 
) 

Hy vọng điều đó sẽ hữu ích!

+2

bất kỳ url nào được tạo từ người trợ giúp trong mẫu không hoạt động nếu bạn làm theo cách này :( – jrwren

91

Tôi biết rằng câu hỏi này đã được hỏi 2 năm trước đây, nhưng tôi đã phải đối mặt với cùng một vấn đề và tìm ra giải pháp:

Trong dự án urls.py:

urlpatterns = patterns('', 
    url(r'^', include('my_app.urls')), #NOTE: without $ 
) 

Trong my_app.urls.py:

urlpatterns = patterns('', 
    url(r'^$', 'my_app.views.home', name='home'), 
    url(r'^v1/$', 'my_app.views.v1', name='name_1'), 
    url(r'^v2/$', 'my_app.views.v2', name='name_2'), 
    url(r'^v3/$', 'my_app.views.v3', name='name_3'), 
) 
+1

Tuyệt vời! Hoạt động trên django 1.8 – fabrigm

+1

các tác phẩm tuyệt vời trên django 1.9 cũng – Amir

+1

HOÀN THÀNH! Hoạt động như một nét duyên dáng với Django 1.8.4 – Frankline

0

Tôi biết câu trả lời là muộn, nhưng gần đây tôi có phần săn bắn hợp lý. Đây là những gì tôi đã thử với CBV .. trong Dự án urls.py

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^$', include('app_name.urls', namespace='app_name')), 
] 

PS: Bạn luôn nên sử dụng không gian tên. Cung cấp một lợi thế tốt sau này.

Trong App urls.py

urlpatterns = [ 
    url(r'^$', views.IndexPageView.as_view(), name='index'), 
] 
Các vấn đề liên quan