Reputation: 151
I've this urls in my urls.py
urlpatterns = [
# Examples:
url(r'^$', 'products.views.home', name='home'),
url(r'^s/$', 'products.views.search', name='search'),
url(r'^products/$', 'products.views.all', name='products'),
url(r'^products/(?P<slug>[\w-]+)/$', 'products.views.single', name='single_product'),
url(r'^cart/(?P<id>\d+)/$', 'carts.views.remove_from_cart', name='remove_from_cart'),
url(r'^cart/(?P<slug>[\w-]+)/$', 'carts.views.add_to_cart', name='add_to_cart'),
url(r'^cart/$', 'carts.views.view', name='cart'),
url(r'^checkout/$', 'orders.views.checkout', name='checkout'),
url(r'^orders/$', 'orders.views.orders', name='user_orders'),
url(r'^ajax/dismiss_marketing_message/$', 'marketing.views.dismiss_marketing_message', name='dismiss_marketing_message'),
url(r'^ajax/email_signup/$', 'marketing.views.email_signup', name='ajax_email_signup'),
url(r'^ajax/add_user_address/$', 'accounts.views.add_user_address', name='ajax_add_user_address'),
#footerpages
url(r'^about/$', 'footerpages.views.about_us', name='about_us'),
url(r'^faq/$', 'footerpages.views.faq', name='faq'),
url(r'^privacy/$', 'footerpages.views.privacy', name='privacy'),
url(r'^terms/$', 'footerpages.views.terms', name='terms'),
#contact us
url(r'^contact/$', 'contact.views.contact', name='contact'),
# url(r'^blog/', include('blog.urls')),
#(?P<all_items>.*)
#(?P<id>\d+)
url(r'^admin/', include(admin.site.urls)),
url(r'^accounts/logout/$', 'accounts.views.logout_view', name='auth_logout'),
url(r'^accounts/login/$', 'accounts.views.login_view', name='auth_login'),
url(r'^accounts/register/$', 'accounts.views.registration_view', name='auth_register'),
# url(r'^accounts/profile/$', 'accounts.views.profile', name='profile'),
url(r'^accounts/profile/edit/$', 'accounts.views.profile_edit', name='profile_edit'),
url(r'^accounts/packages/$', 'accounts.views.packages', name='packages'),
url(r'^accounts/packages/edit/(?P<variation_id>\d+)/$', 'accounts.views.packages_edit', name='packages_edit'),
url(r'^accounts/packages/delete/(?P<variation_id>\d+)/$', 'accounts.views.packages_delete', name='packages_delete'),
url(r'^accounts/packages/add/$', 'accounts.views.packages_add', name='packages_add'),
url(r'^accounts/address/add/$', 'accounts.views.add_user_address', name='add_user_address'),
url(r'^accounts/activate/(?P<activation_key>\w+)/$', 'accounts.views.activation_view', name='activation_view'),
]
Then I changed
url(r'^products/(?P<slug>[\w-]+)/$', 'products.views.single', name='single_product'),
To:
url(r'^(?P<slug>[\w-]+)/$', 'products.views.single', name='single_product'),
So 'single_product' products urls works fine and it passes in the slug. I can even load accounts/ pages. But other urls such as about, faq, cart, checkout, all gives me a page not found error. I can't event access http://127.0.0.1:8000/admin/. It gives me a Page not found (404).
Now if I were to change the urls.py to say /xyz/admin/ then http://127.0.0.1:8000/xyz/admin/ works. Same goes for xyz/cart or xyz/faq.
I would like to keep
url(r'^(?P<slug>[\w-]+)/$', 'products.views.single', name='single_product'),
What can I do?
Just including carts.views.view if it affects anything.
def view(request):
try:
the_id = request.session['cart_id']
cart = Cart.objects.get(id=the_id)
except:
the_id = None
if the_id:
new_total = 0.00
for item in cart.cartitem_set.all():
pass
for variation in item.variations.all():
line_total = (float(variation.price_per_guest) * item.quantity) + (float(variation.extra_km_charge) * item.distance) + (float(variation.extra_hours_charge) * item.hour)
new_total += line_total
# subtotal_guests = variation.price_per_guest * item.quantity
# subtotal_km_charges = variation.extra_km_charge * item.distance
# subtotal_hours_charges = variation.extra_hours_charge * item.hour
request.session['items_total'] = cart.cartitem_set.count()
cart.total = new_total
cart.save()
context = { "cart": cart,
# "subtotal_guests": subtotal_guests,
# "subtotal_km_charges": subtotal_km_charges,
# "subtotal_hours_charges": subtotal_hours_charges,
}
else:
empty_message = "Your Cart is Empty, please keep shopping."
context = {"empty": True, "empty_message": empty_message }
template = "cart/view.html"
return render(request, template, context)
Upvotes: 1
Views: 132
Reputation: 45575
All works as intended - about/
perfectly matches with the ^([\w-]+)/$
url so the products.views.single
view is called for this url. The same issue is valid for faq/
, cart/
, checkout/
and admin/
pages - they all catched by this regex..
Move the single_product
url to the very bottom of your urlpatterns
. It should be the last record in the list:
urlpatterns = patterns('',
... # all your urls except the `single_product`
url(r'^(?P<slug>[\w-]+)/$', 'products.views.single', name='single_product')
)
Upvotes: 1