def handle(self, *args, **options): for filename in args: self.stdout.write("Reading {}".format(filename)) defaults = parse(filename) categories = defaults.pop('categories') slug = defaults.pop('slug') #print(title) #print(categories) #pprint(defaults) # Implement update_or_create only available when 1.7 is out. try: post = Post.objects.get(slug=slug) for key, value in defaults.items(): setattr(post, key, value) post.save() self.stdout.write("Updated article {}".format(post.title)) except Post.DoesNotExist: defaults.update({'slug': slug}) post = Post(**defaults) post.save() self.stdout.write("Created article {}".format(post.title)) for cat_name in categories: try: post.categories.get(name=cat_name) self.stdout.write("Found category {}.".format(cat_name)) except Category.DoesNotExist: try: category = Category.objects.get(name=cat_name) post.categories.add(category) self.stdout.write( "Assigned category {}.".format(cat_name) ) except Category.DoesNotExist: post.categories.create(name=cat_name) self.stdout.write( "Created category {}".format(cat_name) ) # Now do the redirects. # the Redirect model has an old_path, a new_path, and a site_id. # use settings.SITE_ID old_path = "/blogue/" + post.slug + ".html" new_path = "/blogue/" + post.slug + "/" defaults = { 'site_id': settings.SITE_ID, 'old_path': old_path, } try: redirect = Redirect.objects.get(**defaults) redirect.new_path = new_path redirect.save() self.stdout.write( "Updated redirect {} ==> {}".format(old_path, new_path) ) except Redirect.DoesNotExist: defaults.update({'new_path': new_path}) redirect = Redirect(**defaults) redirect.save() self.stdout.write( "Created redirect {} ==> {}".format(old_path, new_path) )
def reslug(modeladmin, request, queryset): """ admin action to reset the slug of an entry creates a redirect too - If the slug hasnt changed, do nothing - If the redirect already exists, don't create a new redirect - If there is a redirect that will send this into a loop, remove that redirect and create a new one """ for obj in queryset: old_url = obj.get_absolute_url() obj.slug = None obj.save() if old_url != obj.get_absolute_url(): try: redirect = Redirect.objects.get(site=get_current_site(request), old_path=old_url, new_path=obj.get_absolute_url()) except ObjectDoesNotExist: try: looping_redirect = Redirect.objects.get(site=get_current_site(request), old_path=obj.get_absolute_url(), new_path=old_url) looping_redirect.delete() except ObjectDoesNotExist: pass redirect = Redirect(site=get_current_site(request), old_path=old_url, new_path=obj.get_absolute_url()) redirect.save()
def create_redirect(sender, instance, raw, **kwargs): # Only proceed if not raw, we're dealing with an existing object, and the # contrib redirects app is installed. if not raw and instance.pk \ and 'django.contrib.redirects' in settings.INSTALLED_APPS: from django.contrib.redirects.models import Redirect # Only proceed if an existing object exists try: existing = sender.objects.get(pk=instance.pk) except sender.DoesNotExist: return existing_path = existing.get_absolute_url() new_path = instance.get_absolute_url() if hasattr(instance, 'site') and existing.site != instance.site: new_path = '//{0}{1}'.format(instance.site.domain, new_path) if existing_path != new_path: try: redirect = Redirect.objects.get(site=existing.site, old_path=existing_path) except Redirect.DoesNotExist: redirect = Redirect(site=existing.site, old_path=existing_path) redirect.new_path = new_path redirect.save()
def _setup_redirect(self, old, new): if old != new: try: r = Redirect(site=self.conf['pages']['site'], old_path=old, new_path=new) r.save() except: self.logger.warn("Could not setup redirect %s to %s " % (old, new))
def _setup_redirects(self, page): """ Setup redirects for new URLs """ for url in self.document.old_urls(): if url != page.url: r = Redirect(site=self.conf['pages']['site'], old_path=url, new_path=page.url) r.save()
def forwards(self, orm): # XXX use the first site site = Site.objects.all()[0] old_path = '/verification-kit/' new_path = '/tools-and-tips/' if len(Redirect.objects.filter(old_path=old_path)) == 0: redirect = Redirect(old_path=old_path, new_path=new_path, site=site, ) redirect.save()
def forwards(self, orm): # XXX use the first site site = Site.objects.all()[0] old_path = '/verify/' new_path = '/racks/' if len(Redirect.objects.filter(old_path=old_path)) == 0: redirect = Redirect(old_path=old_path, new_path=new_path, site=site, ) redirect.save()
def save(self, *args, **kwargs): if hasattr(self, "get_absolute_url"): model = self.__class__ if self.pk is not None: old_object = model.objects.get(pk=self.pk) if old_object.slug != self.slug: redirect = Redirect( site=self.site, old_path=old_object.get_absolute_url(), new_path=self.get_absolute_url() ) redirect.save() super(Slugged, self).save(*args, **kwargs)
def save(self, *args, **kwargs): if hasattr(self, 'get_absolute_url'): model = self.__class__ if self.pk is not None: old_object = model.objects.get(pk=self.pk) if old_object.slug != self.slug: redirect = Redirect(site=self.site, old_path=old_object.get_absolute_url(), new_path=self.get_absolute_url()) redirect.save() super(Slugged, self).save(*args, **kwargs)
def get(self, request, sku_id): # 查询商品SKU信息 try: sku = GoodsSKU.objects.get(id=sku_id) except GoodsSKU.DoesNotExist: return Redirect(reverse('goods:index')) # 查询所有商品分类信息 categories = GoodsCategory.objects.all() # 查询最新商品推荐 try: news_skus = GoodsSKU.objects.filter( category=sku.category).order_by('-create_time')[0:2] except: news_skus = None # 如果已登录,查询购物车信息 cart_count = self.get_cart_count(request) # 查询其他规格商品 other_skus = GoodsSKU.objects.filter(spu=sku.spu).exclude(id=sku_id) # 保存用户的浏览记录 if request.user.is_authenticated(): strict_redis = get_redis_connection() # StrictRedis key = 'history_%s' % request.user.id strict_redis.lrem(key, 0, sku_id) strict_redis.lpush(key, sku_id) strict_redis.ltrim(key, 0, 4) context = { 'sku': sku, 'categories': categories, 'news_skus': news_skus, 'cart_count': cart_count, 'other_skus': other_skus } return render(request, 'detail.html', context)
def create_redirect(old_path, new_path): obj, is_exists = check_redirect_exists(old_path) if is_exists: obj.update(new_path=new_path) else: Redirect(site_id=settings.SITE_ID, old_path=old_path, new_path=new_path).save()
def process_response(self, request, response): if response.status_code != 404: return response # No need to check for a redirect for non-404 responses. path = request.get_full_path() r = Redirect.all().filter('site =', db.Key(settings.SITE_ID)).filter( 'old_path =', path).get() if r is None and settings.APPEND_SLASH: # Try removing the trailing slash. r = Redirect.all().filter('site =', db.Key(settings.SITE_ID)).filter( 'old_path =', path[:path.rfind('/')]+path[path.rfind('/')+1:] ).get() if r is not None: if r.new_path == '': return http.HttpResponseGone() return http.HttpResponsePermanentRedirect(r.new_path) # No redirect was found. Return the response. return response
def create_job_redirect(job): if not job.unique_slug: job.generate_slug() for url in [ "job_view", "thumbnail_view", "applied_users_details", "get_job_applications", "job_application_challenge_submission", ]: redirect = Redirect( site_id=settings.SITE_ID, old_path=reverse(url, kwargs={"unique_slug": job.pk}), new_path=reverse(url, kwargs={"unique_slug": job.unique_slug}), ) redirect.save()
def get(self, request, category_id, page_num): ''' :param request: :param category_id: 商品类别id :param page_num: 页码 :return: ''' # 获取请求参数(排序方式) sort = request.GET.get('sort') # 校验参数合法性 try: category = GoodsCategory.objects.get(id=category_id) except GoodsCategory.DoesNotExist: return Redirect(reverse('goods:index')) categories = GoodsCategory.objects.all() try: new_skus = GoodsSKU.objects.filter( category=category).order_by('-create_time')[0:2] except GoodsSKU.DoesNotExist: new_skus = None if sort == 'price': skus = GoodsSKU.objects.filter(category=category).order_by('price') elif sort == 'hot': skus = GoodsSKU.objects.filter( category=category).order_by('-sales') else: skus = GoodsSKU.objects.filter(category=category) sort = 'default' # 分页内容 # 分页显示 # 参数1:一页显示多少条数据 # 参数2 要分页的数据 paginator = Paginator(skus, 2) try: page = paginator.page(page_num) except EmptyPage: # 页码不存在 page = paginator.page(1) cart_count = self.get_cart_count(request) context = { 'category': category, 'categories': categories, 'sort': sort, 'new_skus': new_skus, 'page': page, 'page_range': paginator.page_range, 'cart_count': cart_count } return render(request, 'list.html', context)
def drupal_redirect_django(path, post): from django.contrib.redirects.models import Redirect from django.contrib.sites.models import Site current = Site.objects.get_current() if path: dst = '/' + path.dst.strip('/') + '/' r = Redirect(site=current, old_path=dst, new_path='/example'+post.get_absolute_url()) r.save() src = '/' + path.src.strip('/') + '/' r = Redirect(site=current, old_path=src, new_path='/example'+post.get_absolute_url()) r.save()
def create_redirect(request): if request.method == 'POST': next = request.GET.get('next', '/admin/djangodblog/report/') form = RedirectForm(request.POST) if form.is_valid(): redirect = form.save() all_errors = Error.objects.filter( url=FULL_SITE_URL + form.cleaned_data['old_path']).update(redirected=True) request.user.message_set.create( message="Successfully created a redirect from %s to %s" % (redirect.old_path, redirect.new_path)) return HttpResponseRedirect(next) old_path = request.GET.get('old_path', None) url = ('http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=' + old_path) response = urllib2.urlopen( urllib2.Request(url, None, {'Referer': 'localhost'})) try: results = simplejson.load(response)['responseData']['results'] suggested_urls = [ trim_host(x['url']) for x in results if x['url'].startswith(FULL_SITE_URL) ] new_path = suggested_urls[0] except: new_path = None form = RedirectForm(instance=Redirect(old_path=trim_host(old_path), new_path=trim_host(new_path), site=Site.objects.all()[0]), ) context = { 'form': form, 'old_url': trim_host(old_path), 'new_url': new_path, 'next': request.META.get("HTTP_REFERER", None), 'suggested_urls': suggested_urls[1:], 'full_site_url': FULL_SITE_URL, } return render_to_response('admin/create_redirect.html', context, RequestContext(request))
def redirect_series(sender: Type[Series], instance: Series, **kwargs): """ Receive a signal when a series is about to be saved. If the series exists and its slug has changed, rename its directory and create a new :class:`~django.contrib.redirects.models.Redirect`. :param sender: The model class that sent the signal. :param instance: The instance of the model. """ if not instance.id: return try: current = Series.objects.get(id=instance.id) except Series.DoesNotExist: return if current.slug != instance.slug: old_path = current.get_absolute_url() old_dir = current.get_directory() new_path = instance.get_absolute_url() new_dir = instance.get_directory() # Update any existing redirects that are pointing to the old path for redirect in Redirect.objects.filter(new_path=old_path): redirect.new_path = new_path if redirect.new_path == redirect.old_path: redirect.delete() else: redirect.save() # Now add the new redirects Redirect.objects.bulk_create([ Redirect(site_id=site_id, old_path=old_path, new_path=new_path) for site_id in Site.objects.values_list('id', flat=True) ]) _move(old_dir, str(new_dir)) instance.cover = instance.cover.name.replace(str(old_dir), str(new_dir)) for chapter in instance.chapters.prefetch_related('pages').iterator(): pages = chapter.pages.all() for page in pages: page.image = page.image.name.replace(str(old_dir), str(new_dir)) Page.objects.bulk_update(pages, ('image', ))
def save(self, *args, **kwargs): """Override default save method. Create new slug if necessary. Create new redirect if slug/URL changes. The slug changes when the date or title of the event changes. We want to always use the current slug/URL, but don't invalidate the old URLs. """ try: old_url = self.get_absolute_url() except NoReverseMatch: old_url = None self.slug = self.generate_slug() new_url = self.get_absolute_url() if old_url and old_url != new_url: site = Site.objects.get_current() Redirect(old_path=old_url, new_path=new_url, site=site).save() super(Event, self).save(*args, **kwargs)
def pre_save(self, instance, add): # get currently entered slug value = self.value_from_object(instance) manager = self.manager # autopopulate if self.always_update or (self.populate_from and not value): value = utils.get_prepopulated_value(self, instance) if __debug__ and not value: print 'Failed to populate slug %s.%s from %s' % \ (instance._meta.object_name, self.name, self.populate_from) slug = self.slugify(value) if not slug: # no incoming value, use model name slug = instance._meta.module_name assert slug, 'slug is defined before trying to ensure uniqueness' slug = utils.crop_slug(self, slug) # ensure the slug is unique (if required) if self.unique or self.unique_with: slug = utils.generate_unique_slug(self, instance, slug, manager) assert slug, 'value is filled before saving' # check if redirect tracking is on and if so prepare if not add and self.redirect_tracking: # Can we import the needed django.contrib.redirects app try: from django.contrib.redirects.models import Redirect from django.contrib.sites.models import Site except ImportError: raise Exception("You are using redirect_tracking. Please be sure to add django contrib apps Redirect and Site to your INSTALLED_APPS.") # does model instance have get_absolute_url defined try: # capture current get_absolute_url pre_update_absolute_url = instance.get_absolute_url() except AttributeError: raise Exception("You are using redirect_tracking on a field whose model does not have get_absolute_url defined. You must define this method on your model.") # make the updated slug available as instance attribute setattr(instance, self.name, slug) if not add and self.redirect_tracking: # check if the slug update caused a change in get_absolute_url # if so and redirect_tracking = True, record in the django contrib redirect app. post_update_absolute_url = instance.get_absolute_url() if pre_update_absolute_url != post_update_absolute_url: # current site site = Site.objects.get_current() # add a redirect redirect = Redirect( site=site, old_path=pre_update_absolute_url, new_path=post_update_absolute_url ) redirect.save() return slug
def setUp(self): self.redirect = Redirect(site_id=1, old_path='abc', new_path='cba') self.item = models.RedirectWithQueryParams(redirect=self.redirect)
def _create_redirects(site, rows): for row in rows: old_path = row["from"] new_path = row["to"] redirect = Redirect(site=site, old_path=old_path, new_path=new_path) redirect.save()